我想知道如何在iPhone屏幕上的任何地方跟踪触摸,并且仍然有UIButtons响应水龙头。
我将UIView子类化,使其成为全屏和层次结构中的最高视图,并覆盖其pointInside:withEvent方法。如果我返回YES,我可以跟踪屏幕上任何位置的触摸,但按钮没有响应(可能是因为视图被指示处理和终止触摸)。如果我返回NO,则触摸通过视图并且按钮响应,但我无法跟踪触摸。
我是否需要子类化UIButton,或者这可以通过响应者链吗?我做错了什么?
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event{
return NO;
}
//only works if pointInside:withEvent: returns YES.
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
NSLog(@"began");
[self.nextResponder touchesBegan:touches withEvent:event];
}
//only works if pointInside:withEvent: returns YES.
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
NSLog(@"end");
[self.nextResponder touchesEnded:touches withEvent:event];
}
答案 0 :(得分:1)
而不是拥有额外的视图,您可以将应用程序主窗口子类化并跟踪触摸(以及其中的其他事件)
@interface MyAppWindow : UIWindow
...
@implementation MyAppWindow
- (void)sendEvent:(UIEvent*)event {
[super sendEvent:event];
if (event.type == UIEventTypeTouches){
// Do something here
}
return;
}
然后将您的应用程序窗口类型设置为MyAppWindow(我在IB的MainWindow.xib中执行了此操作)