我试图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)
我发现了问题所在。我使用了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)
| 归档时间: |
|
| 查看次数: |
1056 次 |
| 最近记录: |