Iphone 向UIScrollView的UIImageView子视图发送触摸手势

Iphone 向UIScrollView的UIImageView子视图发送触摸手势,iphone,objective-c,ios,uiscrollview,uiimageview,Iphone,Objective C,Ios,Uiscrollview,Uiimageview,我已经编程了一个UIImageView,可以在里面画画。因此,它会跟踪用户的触摸并记录。在窗户上使用时效果很好 但是,我随后将其添加为驻留在视图控制器中的UIScrollView的子视图。当我现在尝试使用它时,UIImageView中的触摸手势只是滚动整个视图,而不是在UIImageView中绘制 如何将同样位于UIImageView内部的UIScrollView的手势引用到UIImageView 我希望这是有道理的 致意 编辑:我已将以下所有属性设置为:canCancelContentTouc

我已经编程了一个UIImageView,可以在里面画画。因此,它会跟踪用户的触摸并记录。在窗户上使用时效果很好

但是,我随后将其添加为驻留在视图控制器中的UIScrollView的子视图。当我现在尝试使用它时,UIImageView中的触摸手势只是滚动整个视图,而不是在UIImageView中绘制

如何将同样位于UIImageView内部的UIScrollView的手势引用到UIImageView

我希望这是有道理的

致意

编辑:我已将以下所有属性设置为:
canCancelContentTouches
exclusiveTouch
delaystocontenttouches
为否


现在,当我在UIImageView内部触摸时,它不会滚动,但仍然不会调用以下方法:
touchesBegind:withEvent:
touchesMoved:withEvent:
toucheEnded:withEvent:
,它们都位于ViewController中

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

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

假设您希望一个手指绘制,两个手指滚动。如果您的目标是iOS 5.0,则很容易:

self.scrollView.panGestureRecognizer.minimumNumberOfTouches = 2;

如果您针对的是早期的iOS,则不能使用
PangestureRecognitizer
属性。您必须仔细查看滚动视图的
GestureRecognitivers
属性,以找到正确的识别器。例如code。

@robmayoff正确地认为,拖动滚动视图的子视图是不明确的,因为很难知道它是什么e用户打算拖动…两个手指是区分含义的一种方式

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

另一种区分用户拖动意图的方法是将拖动方向与滚动视图的方向进行比较滚动视图,拖动可以解释为滚动视图的拖动。如果它们接触子视图并垂直于轴拖动,则将其视为子视图的拖动


我发布了一些代码来演示这一点。

UIScrollView不触发触摸事件方法。为此,您必须对UIScrollView进行子类化。如下所示

@interface AppScrollView : UIScrollView {

}

- (id)initWithFrame:(CGRect)frame;
@结束

#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