我尝试在视图控制器中使用自定义UIControl
。我的自定义类,它是UIControl
的子类,并为我的自定义控件分配实例,并通过以下代码添加到我的视图控制器视图中
CustomControl *customControl = [[CustomControl alloc]initWithFrame:CGRectMake(44, 388, 235, 160)];
[self.view addSubview:customControl];
然后我在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
我面临的问题是当我在控件内部进行跟踪时 - (void)cancelTrackingWithEvent:(UIEvent *)event
在调用- (BOOL) continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event
方法后调用- (void)cancelTrackingWithEvent:(UIEvent *)event
。那么为什么这个方法- (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");
}
被调用......
我阅读的文件说,如果因非事件原因而被取消,则事件可能为零,例如从窗口中删除但无法理解确切的scernario 提前谢谢。
我始终只返回是。 我实施的代表是:
{{1}}
答案 0 :(得分:2)
我发现了问题。我使用MSSlideNavigationController
覆盖 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
因此,当我跟踪时,触摸传递给MSSlideNavigationController
。为了解决这个问题,我改变了(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch' in
MSSlideNavigationController`类,当跟踪来自我的CustomUIControl时返回NO。我将标签9999设置为我的customcontrol
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if (touch.view.tag == 9999) {
return NO;
}
return YES;
}
答案 1 :(得分:2)
也许这会有所帮助。 我曾经查过UISlider的头文件,发现它使用了这种方法。
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer;
描述
询问是否应允许手势识别器继续跟踪触摸事件。 子类可以覆盖此方法并使用它来阻止识别特定手势。例如,UISlider类使用此方法来防止滑动平行于滑块的行进方向并从拇指开始。 在调用此方法时,手势识别器处于UIGestureRecognizerStatePossible状态,并认为它具有移动到UIGestureRecognizerStateBegan状态所需的事件。 此方法的默认实现返回YES。
答案 2 :(得分:0)
为了调用continueTrackingWithTouch:withEvent
,我认为您需要从YES
和beginTrackingWithTouch:withEvent
返回continueTrackingWithTouch:withEvent
。如果您未返回YES
,则表示您不希望再次跟踪该触摸,并且将不再调用continueTrackingWithTouch:withEvent
。
调用cancelTracking...
的一个原因是,如果您在跟踪触摸时返回主屏幕。