原因 - (void)cancelTrackingWithEvent:(UIEvent*)事件被调用如果我正在使用MSSlideNavigationController?

jai*_*ani 6 uicontrol ios

我试图UIControl在我的视图控制器中使用自定义.我的自定义类,它UIControl为我的自定义控件创建子类并为其分配实例,并通过以下代码添加到我的视图控制器视图中

 CustomControl *customControl = [[CustomControl alloc]initWithFrame:CGRectMake(44, 388, 235, 160)];
 [self.view addSubview:customControl];
Run Code Online (Sandbox Code Playgroud)

然后我在实现以下委托方法 CustomControl

- (BOOL) beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event;
- (BOOL) continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event;
- (void) endTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event;
- (void)cancelTrackingWithEvent:(UIEvent *)event
Run Code Online (Sandbox Code Playgroud)

我面临的问题是当我在控件内部进行跟踪时 - (void)cancelTrackingWithEvent:(UIEvent *)event在该- (BOOL) continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event方法未被调用之后调用.为什么这个方法- (void)cancelTrackingWithEvent:(UIEvent *)event被调用...

我阅读的文件说,如果由于非事件原因被取消,事件可能是零,例如从窗口中移除但无法理解确切的scernario提前感谢.

我总是只返回YES. 我实施的代表是:

- (BOOL) beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event{
    [super beginTrackingWithTouch:touch withEvent:event];
    NSLog(@"Touch begins");
    return YES;
}

- (BOOL) continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event{
    [super continueTrackingWithTouch:touch withEvent:event];
    NSLog(@"Touch continous");
    return YES;
}

- (void) endTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event{
    [super endTrackingWithTouch:touch withEvent:event];
    NSLog(@"Touch ends");
}

- (void)cancelTrackingWithEvent:(UIEvent *)event
{
    NSLog(@"Touch cancelled due to remove from window");
}
Run Code Online (Sandbox Code Playgroud)

jai*_*ani 2

我发现了问题所在。我使用了MSSlideNavigationController它覆盖 -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch

所以当我跟踪时,触摸会传递到MSSlideNavigationController。为了解决这个问题,我更改了 (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch' inMSSlideNavigationController` 类,当跟踪来自我的 CustomUIControl 时,该类返回 NO。我将标签 9999 设置为我的自定义控件

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {

    if (touch.view.tag == 9999) {
        return NO;
    }
    return YES;
}
Run Code Online (Sandbox Code Playgroud)