iOS:UIPanGesture和框架/边界问题

时间:2013-02-06 14:30:58

标签: ios drag-and-drop uipangesturerecognizer

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

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

我已经将头发撕裂了,并且正在进行大规模的脑力训练。有没有办法在超视图中获取拖动视图的坐标,然后将其转换为目标视图的坐标?

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

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


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

xib基础知识的图像:

http://i.imgur.com/obRKMaT.png

2 个答案:

答案 0 :(得分:2)

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

CGPoint p = [gesture locationInView:viewTarget];

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

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

答案 1 :(得分:1)

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

此代码将其从superView坐标系转换为targetView坐标系。您应该在[viewTarget addSubview:icon];

之后立即执行此操作
[viewTarget convertRect:icon.frame fromView:icon.superView];