2011-10-25 92 views
4

我想在Xcode 4.2中針對iPhone做一個小應用程序。我想要的是一個UIButton,它可以在屏幕上進行動畫處理,當你按下它時,將它設置爲0。我從UIView類中找到了能夠處理用戶交互的方法,並且發現了這個代碼:動畫UIButton上的用戶交互

[UIView animateWithDuration:3.0 
         delay:0 
        options: UIViewAnimationOptionAllowUserInteraction | UIViewAnimationOptionAllowAnimatedContent 
       animations: ^{ CGRect myRect = enemy1.frame; 
        myRect.origin.y = 300; 
        myButton.frame = myRect; 
       } 
       completion:nil]; 

現在,這樣做的動畫是正確的,但事情是,它立即將origin.y設置爲300,這意味着我不能按下「隨着它滑落」按鈕。我只能按下那個位置上的origin.y,我可以按下它,即使它還沒有完成動畫。

回答

1

可以使用,

button.frame = CGRectMake(100, 100, 60, 40); 
[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:4.0]; 
button.frame = CGRectMake(100, 300, 60, 40);  
[UIView commitAnimations]; 
+0

它不解決問題 - 結果是一樣的。問題是沒有更新按鈕的框架,您可以嘗試在動畫過程中更新它。 – alhcr

+0

感謝您的幫助,但上面的代碼沒有幫助,正如alhcr指出的那樣。在動畫期間嘗試更新它意味着什麼? – Seerex

5

觸摸事件不正確的iOS而視圖動畫工作。您可以在視圖位於源位置時觸摸視圖,或在視圖位於目標位置時觸摸視圖,但觸摸事件不會正確觸發視圖在動畫時的位置。

要解決這個問題,您必須禁用視圖上的用戶交互操作,並且在動畫設計中忘記觸摸事物的想法,或者您可以使用啓用了用戶交互的另一個靜態視圖覆蓋動畫視圖並因此攔截觸摸事件,然後試圖找出觸摸事件是否在動畫視圖區域中。你可以這樣做:

CGPoint animatingViewPosition = [(CALayer*)[animatingView.layer presentationLayer] position];