2014-02-28 69 views
0

期間IBAction爲不叫我的應用程序我把這種方法來移動一個UIButton的iOS:動畫

- (void) buttonMovement{ 

    [UIView animateWithDuration:0.8 
          delay:0.0 
         options:UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat | UIViewAnimationOptionCurveEaseInOut 
        animations:^{ 
         // do whatever animation you want, e.g., 
         play_bt.center = CGPointMake(play_bt.center.x, play_bt.center.y-20); 
        } 
        completion:NULL]; 
} 

這樣我的按鈕做了一個「向上&下」運動,但如果我「推」了,IBAction爲不起作用。如果我不做這個動畫,它工作正常。爲什麼? 如果這個動畫是一個調用動作的問題,那麼做一個動畫不會給我帶來問題的方法是什麼? 另一種方法是將按鈕作爲圖像視圖移動,然後放上一個隱形按鈕,但我失去了新聞效果,並且它變成了所有的噪音。

+0

的標題線程是「動畫期間不調用IBAction」,但是你已經粘貼了一個無效方法? – Nick

+0

我寫道,這是我的動畫方法,它不是util顯示IBAction,它不叫...... – CrazyDev

+0

@nazz_areno我認爲這將是有益的:http://stackoverflow.com/questions/20446966/clicking-an-animating - 圖像按鈕。開始使用觸摸代替IBAction。 – Radu

回答

0

解決方法是爲您的動畫按鈕實現touchesBegan而不是IBAction。

您可能要檢查這裏給出的答案:Clicking an animating image/button

- (void)touchesBegan:(NSSet*) touches withEvent:(UIEvent *) event{ 

    // Get location of touched point 
    CGPoint point = [[touches anyObject] locationInView:self.view]; 

    // 
    // Check if point is inside your button frame 
    // or compare it with the presentation layer 
    // 

} 
3

很多人都在這裏提供了錯誤的信息。我試圖權衡評論。現在是發佈結論性答案的時候了。引用我對上述@Radu鏈接的「clicking an animating image/button」問題的回答:

簡短的回答是,在動畫製作過程中不能點擊視圖。原因是視圖實際上並不是從開始到結束位置。相反,系統使用核心動畫中的「表示層」來創建視圖對象的外觀移動/旋轉/縮放/任何。

你需要做的是將一個輕拍手勢識別器附加到一個包含視圖的完全包圍動畫(可能是整個屏幕),然後編寫看着水龍頭座標的代碼,進行座標轉換,並決定是否點擊是在你關心的視圖上。如果水龍頭在一個按鈕上,並且您希望按鈕突出顯示,則您也需要處理該邏輯。

我已經在github上一個示例項目,顯示瞭如何做到這一點時,你正在做兩UIView的動畫和核心動畫與CABasicAnimation(其中動畫層,沒有意見。)

Core Animation demo with hit testing

+0

耶最後@Radu鏈接解決了我的問題,謝謝你的例子 – CrazyDev