2011-02-15 52 views
1

我有一個子視圖按鈕(爲了說話的緣故子視圖是紅色正方形),當用戶在按鈕上按住紅色正方形動畫片半透明。'按住'UIButton行爲 - `觸摸取消'控制狀態阻止進一步的控制狀態

我有連接到這個方法的按鈕:

-(IBAction)peekToggle:(id)sendr{   

    NSLog(@"TOGGLE"); 

    if(self.view.alpha ==1)self.view.alpha = 0.1; 
    else self.view.alpha = 1;  
} 

通過行爲:touch up insidetouch up outsidetouch down。所以當我按住按鈕的紅色框變成半透明,當我釋放我的手指時,它返回到不透明。 這最初工作正常,但是,如果我按住按鈕超過1秒,該按鈕不會註冊touch up(釋放的手指)。

注意:我在父視圖(父視圖的子視圖父母不是父按鈕)上有一個longPressGestureRecogniser,但它沒有被觸發(預期)。

我很確定我長按按鈕被註冊爲touch cancel,然後使touch up事件無效。

我該如何預防/解決此問題?

我可以停止touch Cancel射擊嗎? (即使我已經註冊了控制狀態,這個事件似乎會觸發)或者在事件中,告訴按鈕保持/開始註冊事件?

+0

longPressGestureRecogniser?那麼它不會觸發,因爲父母在按鈕「後面」。嘗試添加一個longPressGestureRecogniser到它自己的按鈕。如果觸摸未被識別,則識別器將逐級向下觸摸按鈕。 – picknick 2011-02-15 12:51:02

+0

我應該已經更清楚了,父=子視圖的父母,而不是按鈕的父母,我不想要長按事件,長按按鈕觸發取消其註冊事件或不註冊事件。 – 2011-02-15 13:03:39

回答

3

SOLUTION:

刪除了IBActions完全並加入UILongPressGestureRecognizer按鈕具有非常短的持續時間最小。

UILongPressGestureRecognizer * recognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];  
     recognizer.minimumPressDuration = 0.1; 
     [self.peekButton.view addGestureRecognizer:recognizer]; 
     [recognizer release]; 

然後在選擇的GR,閱讀GR的狀態:父

- (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer{ 

     //1 = start 
     if(gestureRecognizer.state==1 || gestureRecognizer.state==3)[self peekToggle]; 
     //3=end 
} 
1

如果你認爲這是你的問題,你可以嘗試覆蓋- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event ,看看你是否有任何活動。

+0

我做到了這一點,並按預期發生火災,看起來像我在帖子中說的那樣使接觸無效。 – 2011-02-15 12:48:06

1

您可以使用UIGestureRecognizerDelegate接口來微調手勢識別器被觸發的時間。