【问题标题】:Drag a UIView from one UIScrollView to another将 UIView 从一个 UIScrollView 拖到另一个
【发布时间】:2012-06-09 16:30:47
【问题描述】:

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

目前,我在要移动的 UIView 上有一个 UILongGestureRecognizer,这样当用户开始拖动它时,我会让视图跟随触摸:

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

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

当我开始拖动时,有没有办法将它从滚动视图中“弹出”,以便我可以将它带到另一个滚动视图?

另外,如何测试“放置”位置?我想知道它是否被丢弃在某个其他视图上。

还是我的做法完全错了?

谢谢大家

【问题讨论】:

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


    【解决方案1】:

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

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

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

    现在在删除视图时,您需要知道它是否在另一个滚动视图中

    //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];
    }
    

    【讨论】:

    • 哇!感谢奥马尔的快速反应。如何判断何时开始和停止拖动?
    • 你可以长按开始拖动,在这个函数中 - (void)dragChild:(UILongPressGestureRecognizer *)longPress {
    • 好的!我已经将我的视图拖出它的滚动视图并跨越到另一个。我如何检测到用户已经“放弃”了视图?谢谢奥马尔。
    • 长按 gr 会将其状态更改为 UIGestureRecognizerStateEnded
    • 所以我查看了文档,看起来我需要 touchesEnded 方法来表明它已经完成。但我似乎无法拦截它 - 这是一个标准的委托调用吗?丹?还有另一种检查 stateEnded 的方法吗?
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-01
      相关资源
      最近更新 更多