在UIScrollView的子视图中拖动事件

时间:2011-09-09 17:52:39

标签: objective-c ios drag-and-drop

如何将拖动事件添加到UIScrollView的子视图?结构如下:

-UIView
   -UIScrollView
      -UIView
      -UIView
        ...

我尝试从以下开始:

-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *aTouch = [touches anyObject];
CGPoint location = [aTouch locationInView:self.superview.superview];
[UIView beginAnimations:@"Dragging A DraggableView" context:nil];
self.frame = CGRectMake(location.x, location.y, 
                        self.frame.size.width, self.frame.size.height);
[UIView commitAnimations];

}

但没有任何反应!非常感谢帮助。 感谢

2 个答案:

答案 0 :(得分:1)

只要有人像我一样找到这个问题,我通过在scrollview中的子视图中添加一个手势识别器来解决这个问题。手势识别器将自己处理触摸事件。

答案 1 :(得分:0)

布鲁诺,一种可能性是使用手势识别器,正如斯科特提到的那样。

另一种可能性是使用你提到的touchesMoved:方法。使用touchesMoved:方法需要你实现另外三个方法,touchesBegan:,touchesEnded:,touchesCancelled:。它们覆盖了手指触摸屏幕的阶段:

  • 首次联系(touchesBegan)允许您根据需要设置变量。
  • 连续移动(touchesMoved)可让您跟踪移动并持续移动内容。
  • 最后删除手指(touchesEnded),您可以在其中完成您想要保留的任何更改。
  • 如果手势中断(通过电话或某些其他控制器抓取触摸事件),则需要
  • touchesCancelled进行清理。

您需要在同一个类上使用所有四个方法,否则实现该方法的超类将获取触摸处理,并且您的代码将无法按预期运行。

问候,nobi