【问题标题】:Dragging UIView with UIAttachmentBehavior and auto layout constraints使用 UIAttachmentBehavior 和自动布局约束拖动 UIView
【发布时间】:2014-02-03 11:25:52
【问题描述】:

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

滚动视图用于启用捏拉缩放。我希望能够使用新的UIAttachmentBehavior 使用UIPanGestureRecognizer 移动滚动视图。这在没有自动布局的情况下效果很好,但启用自动布局后,滚动视图内容会闪烁并且滚动视图会失真。

- (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;
    }
}

我的猜测是设置为滚动和图像视图的约束会干扰附件行为,滚动视图的contentSize 也取决于其内容和约束。

任何想法如何得到这个工作将不胜感激。

编辑:使用普通视图而不是 scrollView/imageView 组合进行测试,并且存在相同的问题。因此,使用UIAttachmentBehavior 进行自动布局的平移目的肯定是个问题。

【问题讨论】:

标签: ios uiscrollview autolayout uikit-dynamics


【解决方案1】:

您不能同时使用自动布局和 UIKit 动态。两个系统都独立地尝试设置视图的框架,并且它们彼此不知道,所以这就是你看到闪烁的原因。

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

【讨论】:

  • 我花了 1 个小时在我的项目中寻找 UIKit Dynamics 出了什么问题...你确认我刚刚意识到的!
猜你喜欢
  • 1970-01-01
  • 2017-12-24
  • 2019-06-05
  • 1970-01-01
  • 2013-05-14
  • 1970-01-01
  • 2021-01-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多