旋转 UIView 导致它改变位置

Posted

技术标签:

【中文标题】旋转 UIView 导致它改变位置【英文标题】:Rotating UIView Cause It to Change Position 【发布时间】:2014-08-14 13:10:50 【问题描述】:

我试图在拖动时围绕其中心旋转 uiview (UIPanGestureRecognizer),但由于某种原因,uiview 的位置也在发生变化。我不明白为什么当它改变旋转时它会改变位置,因为我根本不尝试改变位置。旋转不是应该相对于uiview的中心旋转uiview吗?

如下所示:https://www.youtube.com/watch?v=5M1L2MyPdbg&feature=youtu.be

这是我的代码:

- (void)rotateHand:(UIPanGestureRecognizer *)panGesture 
    if ([(UIPanGestureRecognizer*)panGesture state] == UIGestureRecognizerStateBegan) 
        CGPoint touchPoint = [panGesture locationInView:[self view]];
        float dx = touchPoint.x - minHandContainer.center.x;
        float dy = touchPoint.y - minHandContainer.center.y;
        arcTanMin = atan2(dy,dx);
        startTransform = minHandContainer.transform;
    
    if ([(UIPanGestureRecognizer*)panGesture state] == UIGestureRecognizerStateChanged) 
        CGPoint pt = [panGesture locationInView:[self view]];
        float dx = pt.x  - minHandContainer.center.x;
        float dy = pt.y  - minHandContainer.center.y;
        float ang = atan2(dy,dx);
        float angleDifference = arcTanMin - ang;
        minHandContainer.transform = CGAffineTransformRotate(startTransform, -angleDifference);
    

【问题讨论】:

旋转只是边界的变化。所以如果你使用自动布局,当你旋转时,子视图会改变它的边界..它可能会改变位置 【参考方案1】:

有几件事可能会发生。首先,如果您启用了自动布局,它可能会对您的旋转产生一些奇怪的影响,例如在旋转过程中试图保持 UIView 和设备侧面之间的边界,正如this 线程中所讨论的那样。尝试将其关闭并测试它是否当前处于打开状态。

如果不是这样,您可能需要查看this 线程。

【讨论】:

以上是关于旋转 UIView 导致它改变位置的主要内容,如果未能解决你的问题,请参考以下文章

应该如何在动画中旋转UIView呢?

UIView锚点->拖动->旋转变换导致闪烁

UIView 迅速改变它的位置

编程布局约束导致旋转不调整基本 UIView

通过点击它来改变 UIView/UIControl 的屏幕位置

UIview演示仅在一个方向上旋转