使用UIAttachmentBehavior和自动布局约束拖动UIView

时间:2014-02-03 11:25:53

标签: ios uiscrollview autolayout uikit-dynamics

我在IB中设置了UIScrollView,其中包含UIImageView的自动布局。您可以查看Evgenii的Github存储库,了解它的设置方式:https://github.com/evgenyneu/ios-imagescroll

scrollview用于启用双指缩放。我希望能够使用新的UIPanGestureRecognizer使用UIAttachmentBehavior移动滚动视图。这在没有自动布局的情况下运行良好,但启用了自动布局后,滚动视图内容会闪烁,滚动视图会变形。

- (void)handlePanGesture:(id)sender
{
    CGPoint p = [_panGesture locationInView:self.view];

    if (_panGesture.state == UIGestureRecognizerStateBegan) {
        self.scrollView.userInteractionEnabled = NO;

        CGPoint center = self.view.center;
        UIOffset offset = UIOffsetMake(p.x - center.x, p.y - center.y);

        _attachBehavior = [[UIAttachmentBehavior alloc] initWithItem:self.scrollView offsetFromCenter:offset attachedToAnchor:p];
        [_animator addBehavior:_attachBehavior];
    } else if (_panGesture.state == UIGestureRecognizerStateChanged) {
        _attachBehavior.anchorPoint = p;
    }
}

我的猜测是设置为scroll-和imageViews的约束会干扰附件行为,而scrollView的contentSize也会依赖于其内容及其约束。

任何想法如何让它工作将不胜感激。

编辑:使用普通视图而不是scrollView / imageView组合进行测试,同样存在问题。因此,使用UIAttachmentBehavior进行自动布局的平移目的时必须存在问题。

1 个答案:

答案 0 :(得分:1)

您无法同时使用autolayout和UIKit Dynamics。两个系统都独立地尝试设置视图的框架,他们彼此不了解,这就是你看到闪烁的原因。

我的建议是在这种情况下不要使用autolayout。如果你真的想要使用它,你需要在启用动力学动画师之前禁用约束,然后在动态动画结束后重新启用它们。