First, declare the following constants somewhere at the top of the view controller's implementation file.
CGFloat animatedDistance;
static const CGFloat KEYBOARD_ANIMATION_DURATION = 0.3;
static const CGFloat MINIMUM_SCROLL_FRACTION = 0.2;
static const CGFloat MAXIMUM_SCROLL_FRACTION = 0.8;
static const CGFloat PORTRAIT_KEYBOARD_HEIGHT = 216;
static const CGFloat LANDSCAPE_KEYBOARD_HEIGHT = 162;
When the textfield will be touched, we will get the rect of the textfield and convert everything to the window coordinates.
Then we calculate the fraction between the top and bottom of the middle section for the text field's midline.
Then we will clamp this fraction so that the top section is all "0.0" and the bottom section is all "1.0".
Then this fraction is converted to scroll according to the keyboards height.
Finally, apply the animation.