Ios UIViewController和UIView中的触摸方法

Ios UIViewController和UIView中的触摸方法,ios,objective-c,drawing,touches,touchesmoved,Ios,Objective C,Drawing,Touches,Touchesmoved,我正在开发iPad应用程序。MyUIViewController仅包含一个大小为500wx500h的自定义UIView 我在UIViewController和自定义UIView中实现了touch方法,以便当我们在自定义UIView周围进行触摸时调用UIViewController触摸方法,当我们在其中触摸时调用自定义UIView触摸方法 UIViewController触摸已移动: - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent

我正在开发iPad应用程序。My
UIViewController
仅包含一个大小为500wx500h的自定义
UIView

我在
UIViewController
和自定义
UIView
中实现了touch方法,以便当我们在自定义
UIView
周围进行触摸时调用
UIViewController
触摸方法,当我们在其中触摸时调用自定义
UIView
触摸方法

UIViewController触摸已移动:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    CGPoint point = [touch locationInView:self.view];

    NSLog(@"TEST"); // Added during edition
    if (!CGRectContainsPoint(self.drawingView.frame, point)) {
        NSLog(@"UIVIEWCONTROLLER");
    }
}

自定义UIView已移动:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    NSLog(@"CUSTOM VIEW");
}
当我触摸自定义
ui视图
移动手指时,
自定义视图
会被记录,直到我在屏幕上取下手指为止。另一方面,当我在自定义UIView外部触摸时,在TouchsMoved方法中,
UIVIEWCONTROLLER
只被调用一次

我错过什么了吗


编辑:我在我的UIViewController TouchsMoved方法中添加了一个日志。当我在自定义视图内触摸时,它会记录所有触摸阶段的测试。但是当我在外部触摸时,我会得到相同的行为。

将exclusiveTouch属性添加到视图中以禁用多重触摸

your view.exclusiveTouch=YES;

您的self.view很可能正在拦截和处理触摸,因此它们无法通过视图控制器。您可以尝试做两件事中的一件(或两件都做),看看它是否有效:


  • self.view.exclusiveTouch=否

  • self.view.userInteractionEnabled=否

  • 我还会尝试调用
    [super-touchsmoved:touchswithevent:event]


    希望有帮助。

    什么是
    drawingView
    ?您说过您的控制器只有一个视图,但它至少应该有两个:
    self.view
    drawingView
    。。。可能是前者正在劫持触摸?我的UIViewController包含他自己的视图和另一个自定义UIView(称为drawingView)。我尝试先在自定义视图上设置它,然后在UIViewController视图上设置它,但两者都不起作用:/
    self.view.exclusiveTouch=NO无效。但是
    self.view.userInteractionEnabled=NO对bahaviour做了一点改进。我没有得到一个
    UIViewController
    log,而是得到了7个
    UIViewController
    。触摸方法似乎只被调用了7次,然后停止调用。你明白为什么吗/正如我所说,有一些观点截获了这些接触。我认为您还应该尝试调用
    super
    实现
    touchesMoved
    。。。也许不调用它可能会使触摸在一段时间后在控制器代码中“消失”。顺便说一句,你没有解释你想要实现什么。。。也许有更好更简单的方法。。。