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 
} 
} 

回答

2

沒有什麼調用drawRect方法。您不希望直接執行此操作,但在handleGesture方法中,您可以調用[aView setNeedsDisplay],並在下一個繪製週期中調用視圖的drawRect。

+0

如果你想做一些重構,你可以讓你的自定義視圖創建自己的手勢識別器和handleGesture的實現。這樣它可以在視圖內部處理所有這些邏輯,並且您可能不需要使用touchDown標誌。也許你甚至可以消除重寫drawRect的需要: – picciano 2012-02-22 21:32:50

+0

是的......我認爲是這樣並嘗試過,但那並沒有幫助。原因是我在我的「handleGesture」中重繪了我的表格,它創建了我自定義視圖的另一個對象,然後它全部混亂起來。 – Abhinav 2012-02-22 21:34:10

+0

啊,更多的原因是從控制器到視圖更多的手勢識別。無論如何,毫無疑問,您不應該創建自定義視圖的其他實例。 – picciano 2012-02-22 21:36:47

相關問題