2010-04-17 143 views
1

我想知道如何跟蹤iPhone屏幕上的任何地方的觸摸,並仍然有UIButtons響應水龍頭。iPhone - 如何跟蹤觸摸並允許按鈕同時點擊?

我劃分了一個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]; 
} 

回答

1

相反則有額外的觀點,你可以繼承你的應用程序的主窗口和跟蹤觸摸(和其他事件),則它

@interface MyAppWindow : UIWindow 
... 
@implementation MyAppWindow 

- (void)sendEvent:(UIEvent*)event { 
    [super sendEvent:event]; 

    if (event.type == UIEventTypeTouches){ 
     // Do something here 
    } 
    return; 
} 

然後設置你的應用程序窗口類型MyAppWindow(我這樣做,在主窗口.IBI)

+0

謝謝,這是一個很好的開始。我已經成功開始跟蹤窗口中的觸摸,但想要將觸摸組傳遞給視圖控制器來處理觸摸事件。我是否需要@視圖或什麼?代碼,如果有人感興趣:http://pastie.org/924485 – 2010-04-17 12:05:19

+0

得到了我正在尋找的行爲。我向代理添加了我想要的視圖,它將它們添加到加載時的窗口中。我在子類窗口中創建了一個視圖控制器的@class,因此當觸摸事件由窗口註冊時,我可以控制視圖的屬性。 – 2010-04-17 17:28:37