将UIView从一个UIScrollView拖到另一个UIScrollView

时间:2012-06-09 16:30:48

标签: ios uiview uiscrollview drag-and-drop uigesturerecognizer

我的屏幕上有两个UIScrollViews,我需要能够将UIView从一个滚动视图拖动到另一个滚动视图。

目前,我在UIView上有一个我想要移动的UILongGestureRecognizer,这样当用户开始拖动它时,我会按照触摸进行视图:

- (void)dragChild:(UILongPressGestureRecognizer *)longPress {
    [[longPress view] setCenter:[longPress locationInView:[[longPress view] superview]]];
}

但是当我得到起始UIScrollView的边界时,视图会消失,因为它被锁定在该scrollview的边界内。

当我开始拖动时,有没有办法将其“弹出”滚动视图,以便我可以将其传送到其他滚动视图?

另外,我如何测试“下降”位置?我想知道它是否被删除了某个其他视图。

或者我是否会以错误的方式解决这个问题?

谢谢你们

2 个答案:

答案 0 :(得分:1)

如果您需要将其从滚动视图拖到另一个滚动视图,请执行以下操作(伪代码)

开始拖动时请执行以下操作

//scrollView1 is the scroll view that currently contains the view
//Your view is the view you want to move
[scrollView1.superView addSubView:yourView];

现在在删除视图时,您需要知道它是否在其他scrollview

//scrollView2 is the second scroll view that you want to move it too
//Your view is the view you want to move
CGPoint point = yourView.center;
CGRect rect = scrollView2.frame;
if(CGRectContainsPoint(rect, point))
{  
    //Yes Point is inside add it to the new scroll view
    [scrollView2 addSubView:yourView];
}
else
{
    //Point is outside, return it to the original view
    [scrollView1 addSubView:yourView];
}

答案 1 :(得分:0)

这是一个未经考验的想法:

  • 当拖动开始时,将拖动视图移出滚动视图(作为子视图)并进入两个滚动视图的相互超视图。
  • 当拖动结束时,将拖动视图移出超级视图并进入新的滚动视图。

您可能必须小心使用坐标系,使用[UIView convertPoint:toView:]之类的东西在移动物体时在视图的不同视角之间进行转换。