2011-08-28 86 views
0

我正在嘗試使按鈕動起來。當我這樣做時(使用button.layer addAnimation)該按鈕被禁用。有什麼方法可以在動畫製作時允許用戶互動?我還嘗試使用animateWithDuration傳遞選項UIViewAnimationOptionAllowUserInteraction來包裝塊中的所有內容,但它仍然不起作用。CAAnimation - 禁用用戶輸入

編輯:這很奇怪。如果我點擊上角(我放置按鈕的位置),它會觸發事件。這幾乎就像按鈕的框架不遵循動畫。

編輯:我最終做的是創建一個事件,每0.1秒觸發設置button.frame等於[[button.layer presentationLayer]幀]。這似乎是訣竅。

回答

0

我落得這樣做是創造每0.1秒設置button.frame等於button.layer觸發一個事件

+0

最好的解決方案是在調用動畫後更改圖層的位置: button.layer.position = endPosition; –

0

使用以下的UIView方法與UIViewAnimationOptionAllowUserInteraction在UIViewAnimationOptions參數:

+(無效)animateWithDuration:(NSTimeInterval)的持續時間的延遲:(NSTimeInterval)延遲的選擇:(UIViewAnimationOptions)選項動畫:(無效(^)(無效))的動畫完成:(無效(^)(BOOL完成))完成

+0

這是行不通的。問題是按鈕的框架沒有被動畫。 – user472292

0

對我來說這個活動似乎有點兒hacky
但是你的[[button.layer presentationLayer] frame]的提帶我到正確的軌道:-)

因此,通過手勢識別連接到移動視圖我可以做以下檢測的上海華:

CGPoint tapLocation = [gestureRecognizer locationInView:self.view]; 

for (UIView* childView in self.view.subviews) 
{ 
    CGRect frame = [[childView.layer presentationLayer] frame]; 
    if (CGRectContainsPoint(frame, tapLocation)) 
    { 
     .... 
    } 
} 
0

我想按鈕放大。所以,我開始動畫之前縮小層:

layer.transform = CATransform3DScale (layer.transform, 0.01, 0.01, 0.01); 

// some animation code 

動畫後,我縮小了它。

// some animation code 
CATransform3D endingScale = CATransform3DScale (layer.transform, 100, 100, 100); 
// some animation code 

[layer addAnimation:animation forKey:@"transform"]; 

layer.transform = endingScale; 

看起來像是如果您直接將其分配給幀將會更改的圖層。但是使用動畫不會改變框架。

0

最好的解決辦法就是你所謂的動畫後更改層的位置:

[button.layer addAnimation:animation forKey:@"animation"]; 

button.layer.position = endPosition;