2012-10-28 24 views
2

後沒有收到觸摸我的情況: 我有一個UIButton,它的與被聲明爲上UIView一個類別CAKeyframeAnimation動畫:的UIButton CAKeyframeAnimation

CAKeyframeAnimation * scale = [CAKeyframeAnimation animationWithKeyPath:@"transform.scale"]; 
    scale.duration = duration; 
    scale.beginTime = delay; 
    scale.fillMode = kCAFillModeForwards; 

    NSMutableArray * times = [[NSMutableArray alloc] init]; 

    scale.values = values; 
    scale.timingFunctions = times; 

    CAAnimationGroup * group = [CAAnimationGroup animation]; 
    [group setDelegate:self]; 
    [group setDuration:duration + delay]; 
    [group setFillMode:kCAFillModeForwards]; 
    [group setRemovedOnCompletion:NO]; 
    [group setAnimations:[NSArray arrayWithObject:scale]]; 

    [self.layer addAnimation:group forKey:@"scale"]; 

的問題是,動畫之後,按鈕不會觸摸。如果我刪除動畫一切正常。 有誰知道我在做什麼錯?

感謝

+0

很高興看到這篇文章:) –

回答

2

當動畫結束時,您必須插入以下代碼行self.layer.transform = CGAffineTransformMakeScale(finalScaleX, finalScaleY);

4

你不應該使用kCAFillModeForwards和removedOnCompletion = NO的最終位置,堅持動畫層。這不適用於控件,並會導致您注意到的行爲。

相反,在將動畫添加到其圖層之前,設置按鈕的最終狀態。

self.layer.transform = CGAffineTransformMakeScale(finalScaleX, finalScaleY); 
[self.layer addAnimation:group forKey:@"scale"]; 
+0

動畫將圖像從'initialScale = 0.001f'縮放到'finalScale = 1.0f'。所以,如果我設置了'CGAffineTransformMakeScale(finalScaleX,finalScaleY)',結果是按鈕從大開始,然後再減小到最後。但這不是我正在尋找的動畫。 – Fry

+0

也許UIControls在某種程度上對它們的層次(以及它們的動畫)有特殊的作用。 UIImageViews也可能非常棘手,通常可以通過UIViews在drawRect中繪製圖像來取代。 您可以嘗試移動該行: self.layer.transform = CGAffineTransformMakeScale(finalScaleX,finalScaleY); 添加到animationDidStop:finished:delegate方法。 – Thyraz

4

問題是動畫只改變了按鈕的顯示,但觸摸目標仍然和以前一樣。您應該在完成後刪除動畫,並在按鈕上設置變換或ht測試表示層。

我寫了關於hit testing animating layers in a blog post的更詳細的解釋。