_overlay.get_Bounds().get_Height() - fieldFrame.get_Bottom();
// give it a little padding, and make sure we never move the game view down,
// also make sure we never move the bottom of the game view past the top of the
// keyboard
targetOffset = Math.max(Math.min(targetOffset - 10, 0), -size.get_Width());
PointF target = new PointF(0, targetOffset);
target = _overlay.get_Transform().TransformPoint(target);
// update and set the transform on the game view
UIView gameView = _overlay.get_Superview();
CGAffineTransform trans = gameView.get_Transform();
_gameViewTransform = trans.Invert().Invert(); // clone
trans.Translate(target.get_X(), target.get_Y());
gameView.set_Transform(trans);
_gameViewTransformed = true;
// touches outside of the keyboard will close the keyboard
_overlay.Add(_touchDetector);