1
我有一個自定義視圖類。在我的視圖控制器裏面,我在這個視圖對象上添加一個Tap手勢識別器。現在,在輕擊手勢的處理程序中,我正在設置一個屬性,這是我正在嘗試在視圖類的drawRect中獲取的視圖對象。現在,令人驚訝的是,當我在「handleGesture」&「drawRect」中打印視圖對象時,我得到兩個不同的對象。正因爲如此,我的drawRect內部條件沒有得到執行。可能是什麼原因?在自定義視圖中處理UITapGestureRecognizer
它沒有進入狀態UIGestureRecognizerStateBegan。它總是進入UIGestureRecognizerStateEnded。
// Adding Gesture in my view
MyCustomView *customView= [[[MyCustomView alloc] init] autorelease];
UIGestureRecognizer *GestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
[customView addGestureRecognizer:GestureRecognizer];
[GestureRecognizer release];
// Handling tap on my view
- (void)handleGesture:(UIGestureRecognizer *)GestureRecognizer; {
MyCustomView *aView= (MyCustomView *)GestureRecognizer.view;
switch (iGestureRecognizer.state) {
case UIGestureRecognizerStateBegan:
NSLog(@"Began");
[aView setNeedsDisplay];
aView.touchDown = YES;
break;
case UIGestureRecognizerStateEnded:
NSLog(@"Ended");
aView.touchDown = NO;
[aView setNeedsDisplay];
break;
default:
break;
}
}
// Inside my view class
- (void)drawRect:(CGRect)iRect {
if (self.touchDown) {
// Do something here
}
}
如果你想做一些重構,你可以讓你的自定義視圖創建自己的手勢識別器和handleGesture的實現。這樣它可以在視圖內部處理所有這些邏輯,並且您可能不需要使用touchDown標誌。也許你甚至可以消除重寫drawRect的需要: – picciano 2012-02-22 21:32:50
是的......我認爲是這樣並嘗試過,但那並沒有幫助。原因是我在我的「handleGesture」中重繪了我的表格,它創建了我自定義視圖的另一個對象,然後它全部混亂起來。 – Abhinav 2012-02-22 21:34:10
啊,更多的原因是從控制器到視圖更多的手勢識別。無論如何,毫無疑問,您不應該創建自定義視圖的其他實例。 – picciano 2012-02-22 21:36:47