菜鸟教程小白 发表于 2022-12-12 13:45:58

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


                                            <p><p>我有一个 UIViewController,它调用了一个 UIView:</p>

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

<p>即
    “当前规模”</p>

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

<pre><code>if (currentScale &lt;= 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);
    ;
}
</code></pre>

<p>一些方向,将不胜感激 - 谢谢! </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>免责声明 - 这可能不是最好的方法,但这就是我解决它的方法:</p>

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

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

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

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

<pre><code>- (void)handlePan:(UIPanGestureRecognizer *)recognizer {

//dont pan if zoomscale = 1 (this indicates no zooming)
if (zoomScale &lt;= 1.0f) {
    return;
}

//panning gesture began / state changes
if ( == UIGestureRecognizerStateBegan ||
    == UIGestureRecognizerStateChanged) {

    //detect translation gesture
    translation = ;
    //newCenter is a variable detecting how your translation gesture would efect your view&#39;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 &gt;= yMin &amp;&amp; newCenter.y &lt;= yMax &amp;&amp;
                     newCenter.x &gt;= xMin &amp;&amp; newCenter.x &lt;= xMax);

    if(inBounds) {
      //if boundary conditions met : translate your view
      recognizer.view.center = newCenter;
      ;
    }
}
</code></pre>

<p>希望这可以帮助那里的人:不是你必须声明你必须在你的 viewDidLoad 方法中启动(声明)UIPanGestureRecognizer 才能工作</p></p>
                                   
                                                <p style="font-size: 20px;">关于iOS - 设置平移的最小/最大限制,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/18381482/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/18381482/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iOS - 设置平移的最小/最大限制