iOS - 设置平移的最小/最大限制

Posted

技术标签:

【中文标题】iOS - 设置平移的最小/最大限制【英文标题】:iOS - Set Min / Max limit to panning 【发布时间】:2013-08-22 13:12:50 【问题描述】:

我有一个 UIViewController,它调用了一个 UIView:

我正在使用 UIPinchGesture 放大 UIView 我想要做的是根据缩放比例限制用户可以平移多少

即 “当前规模”

目前我使用的代码不允许平移,当 currentScale(缩放的数量)小于 1.1 倍缩放时,但如果 1.1 很棒,它允许平移,但这允许 UIView 被平移和移动没有界限,我希望能够将其平移量设置为其边界:当前代码

if (currentScale <= 1.1f) 
    // Use this to animate the position of your view to where you want
    [UIView animateWithDuration: 0.5
                          delay: 0
                        options: UIViewAnimationOptionCurveEaseOut
                     animations:^
                         CGPoint finalPoint = CGPointMake(self.view.bounds.size.width/2,
                                                          self.view.bounds.size.height/2);
                         recognizer.view.center = finalPoint; 
                     completion:nil];


else 
    recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x,
                                         recognizer.view.center.y + translation.y);
    [recognizer setTranslation:CGPointZero inView:self.view];

一些方向,将不胜感激 - 谢谢!

【问题讨论】:

您正在使用平移或捏合手势或两者兼而有之? 我认为这可能对你有帮助。它对我有用。就像一个魅力。 ***.com/questions/1362718/… @pratyusha - 我都在使用,Rajpuroht - 这是为了 UIScrollView : 和它的讨论速度,而不是限制空间 【参考方案1】:

免责声明 - 这可能不是最好的方法,但这就是我解决它的方法:

1) 我通过测量视图中心如何偏离其原始位置来推断我需要在 5 个不同的缩放点在 X 0r Y 方向上平移多少:

2)我使用 NSLog 进行大部分测量)-我对结果进行了标准化-并将其绘制在 excel 中-绘制了一条曲线-并得到了缩放级别与 View.center 的方程式

3) 然后我根据我得到的方程式简单地对平移手势进行编码:

代码如下(xMax, xMin, yMax, yMin 都绘制了公因数为“zoomScale”的方程

- (void)handlePan:(UIPanGestureRecognizer *)recognizer 

//dont pan if zoomscale = 1 (this indicates no zooming)
if (zoomScale <= 1.0f) 
    return;


//panning gesture began / state changes 
if ([recognizer state] == UIGestureRecognizerStateBegan ||
    [recognizer state] == UIGestureRecognizerStateChanged) 

    //detect translation gesture 
    translation = [recognizer translationInView:self.view];
    //newCenter is a variable detecting how your translation gesture would efect your view's center 
    CGPoint newCenter = CGPointMake(recognizer.view.center.x + translation.x,
                                    recognizer.view.center.y + translation.y);

    //Check whether boundary conditions are met 
    BOOL inBounds = (newCenter.y >= yMin && newCenter.y <= yMax &&
                     newCenter.x >= xMin && newCenter.x <= xMax);

    if  (inBounds) 
        //if boundary conditions met : translate your view 
        recognizer.view.center = newCenter;
        [recognizer setTranslation:CGPointZero inView:self.view];
    
 

希望这可以帮助那里的人:不是你必须声明你必须在你的 viewDidLoad 方法中启动(声明)UIPanGestureRecognizer 才能工作

【讨论】:

以上是关于iOS - 设置平移的最小/最大限制的主要内容,如果未能解决你的问题,请参考以下文章

UIImageView 上的捏合、平移和双击手势

是否有用于设置值的最大或最小限制的 JS 简短语法 [重复]

将平移手势限制为设置帧

jQuery PanZoom:如何限制平移某个百分比?

如何为 Apple 的大图像缩小 iOS 示例设置最大缩放限制?

[Vue] el-input特性记录2-最大值最小值