【发布时间】:2018-07-17 08:47:33
【问题描述】:
我正在开发一个 iOS 应用程序,其中包含一个可扩展和可平移的 UIView。由于允许用户平移和缩放视图,我确实希望将UIView 保持在屏幕边界内。
我在互联网上搜索了很多,但似乎没有真正适合我需要的示例。
下面是我写的平移代码:
private void HandlePan(UIPanGestureRecognizer recognizer)
{
if (recognizer.State != UIGestureRecognizerState.Began &&
recognizer.State != UIGestureRecognizerState.Changed)
return;
var translation = recognizer.TranslationInView(this);
_posX += translation.X;
_posY += translation.Y;
var maxX = (Bounds.Size.Width / 2) * _currentScale;
var maxY = (Bounds.Size.Height / 2) * _currentScale;
// TODO: The min values are wrong
var minX = (Bounds.Size.Width / 2) / _currentScale;
var minY = (Bounds.Size.Height / 2) / _currentScale;
if (_posX > maxX)
_posX = maxX;
else if (_posX < minX)
_posX = minX;
if (_posY > maxY)
_posY = maxY;
else if (_posY < minY)
_posY = minY;
var translatedCenter = new CGPoint(_posX, _posY);
Center = translatedCenter;
recognizer.SetTranslation(CGPoint.Empty, this);
}
我设法使边界仅在屏幕的两侧起作用。 maxX 和 maxY 是正确的。我只是不知道如何计算正确的minX 和minY 值。
下面我添加了一个屏幕录像来显示出了什么问题:
当我尝试拖动到图像的右侧/底部(即minX 和minY 值)时,您可以看到坐标被阻塞(当比例增加> 1 时更是如此)。
这个计算有什么问题或者正确的计算应该是什么?请注意,maxX 和 maxY 工作正常。
var minX = (Bounds.Size.Width / 2) / _currentScale;
var minY = (Bounds.Size.Height / 2) / _currentScale;
【问题讨论】:
-
如果你只是想放大/缩小一个 UIImageView,那么你应该使用 ScrollView 的内置方法。
-
@SharadChauhan,很酷,我不知道。谢谢。
-
你可以参考这个答案:stackoverflow.com/a/41179677/6059313