将触摸手势发送到UIScrollView的UIImageView子视图

时间:2012-03-30 19:28:07

标签: iphone objective-c ios uiscrollview uiimageview

我编写了一个允许我在其中绘制的UIImageView。因此,它跟踪用户触摸并记录它。在窗口中使用时效果很好。

然而,我已将其添加为位于View Controller中的UIScrollView的子视图。当我现在尝试使用它时,UIImageView内部的触摸手势只是滚动整个视图而不是在UIImageView内部绘制。

如何将UIScrollView中对UIImageView内部的手势引用到UIImageView。

我希望这是有道理的

祝你好运

编辑:我已将以下所有属性设置为canCancelContentTouchesexclusiveTouchdelaysContentTouches为否。

现在,当我触摸UIImageView内部时,它不会滚动但仍然不会调用方法:touchesBegan:withEvent:touchesMoved:withEvent:touchesEnded:withEvent:,它们都驻留在ViewController中

4 个答案:

答案 0 :(得分:1)

将UIImageView的exclusiveTouch属性设置为YES(这意味着,当触摸UIImageView时,该触摸不会对任何其他视图产生影响)

答案 1 :(得分:0)

您希望应用如何确定触摸是应该滚动滚动视图还是在图像视图中绘制?

假设你想要一根手指画,两根手指滚动。如果你的目标是iOS 5.0,那很简单:

self.scrollView.panGestureRecognizer.minimumNumberOfTouches = 2;

如果您的目标是早期的iOS,则无法使用panGestureRecognizer属性。您必须浏览滚动视图的gestureRecognizers属性才能找到正确的识别器。 Check out my answer here例如代码。

答案 2 :(得分:0)

@robmayoff是正确的,拖动滚动视图的子视图是不明确的,因为很难知道用户想要拖动的内容......并且两个手指是区分意义的一种方式。

我不喜欢两根手指,因为我不认为这是iOS上一个众所周知的手势。在添加之后,下一步是添加解释它的UI。每当我发现自己需要这样做时,我就开始怀疑自己是否犯了设计错误。

区分用户拖动意图的另一种方法是将拖动方向与滚动视图的方向进行比较。如果用户沿(非方形)滚动视图的轴拖动,则拖动可以解释为表示滚动视图的拖动。如果他们正在触摸子视图并垂直拖动到轴,则将其视为拖动子视图

我发布了一些演示此here - in an answer to a similar question的代码。

答案 3 :(得分:0)

UIScrollView不会为此触发触摸事件方法,您必须继承UIScrollView。如下所示。

@interface AppScrollView : UIScrollView {

}

- (id)initWithFrame:(CGRect)frame;

@end

#import "AppScrollView.h"


@implementation AppScrollView

- (id)initWithFrame:(CGRect)frame 
 {
    if ([super initWithFrame:frame]){
    }
    return self;
   }

  - (void) touchesEnded: (NSSet *) touches withEvent: (UIEvent *) event 
  { 
  // If not dragging, send event to next responder
  if (!self.dragging) 
        [self.nextResponder touchesEnded: touches withEvent:event]; 
  else
     [super touchesEnded: touches withEvent: event];
 }


 @end