1

我想知道如何在 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];
}
4

1 回答 1

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 中这样做了)

于 2010-04-17T10:44:12.377 回答