【问题标题】:iOS: UIPanGesture and frame/bounds issueiOS:UIPanGesture 和框架/边界问题
【发布时间】:2013-02-06 14:30:57
【问题描述】:

我创建了一个相对简单的应用程序,它允许用户从屏幕底部的“托盘”UIView 拖动图像视图,当视图被放下时,它会将自身添加到“目标”的子视图中'UIView.

我的问题是,当我将 imageview 放到目标视图中时,框架完全错误,并且 imageview 跳转(看似随机)到目标视图中的另一个位置。

我已经为此撕毁了我的头发,并且有一个巨大的脑残。有没有办法在超级视图中获取拖动视图的坐标,然后将其转换为目标视图的坐标?

如您所见,我将图标从“托盘”视图中移出,并在拖动开始时进入主视图。当它结束时,我只需将图标添加到目标视图中。

if (gesture.state == UIGestureRecognizerStateBegan){
        if (icon.superview == viewTray) {
            [self closeTray:nil];
            [self.view addSubview:icon];
        }
    }


if (gesture.state == UIGestureRecognizerStateEnded) {
    [viewTarget addSubview:icon];
}

xib 基础的图片:

【问题讨论】:

    标签: ios drag-and-drop uipangesturerecognizer


    【解决方案1】:

    使用手势识别器通过以下方式确定手指在 viewTarget 框架中的触摸位置:

    CGPoint p = [gesture locationInView:viewTarget];
    

    然后将图标的中心设置为该点,您就完成了:

    icon.center = p;
    [icon removeFromSuperView];
    [viewTarget addSubview:icon];
    

    【讨论】:

    • 波什!排序。漂亮的解决方案。非常感谢。
    【解决方案2】:

    问题在于框架在其 superView 的范围内。所以当你把它放到一个新的 superView 中时,它就不一样了。你需要转换它。

    此代码会将其从 superView 坐标系转换为 targetView 坐标系。您可能应该在 [viewTarget addSubview:icon]; 之后立即执行此操作

    [viewTarget convertRect:icon.frame fromView:icon.superView];
    

    【讨论】:

    • 恐怕没用...同样的问题。虽然 convertRect: 方法看起来很有用。错过了。
    • 这将起作用,您只需找到目标转化和超级视图转化的正确组合。对你有用的答案是做同样的事情,尽管是硬编码的。它没有错,但它的方法相同,以供将来参考。
    • 啊好吧...明白了。很快就会阅读并给 convertRect 一个更深入的阅读。非常感谢您的帮助。
    • 没问题,快乐编码! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    • 2014-03-15
    • 2019-07-28
    相关资源
    最近更新 更多