2

私の状況:のカテゴリとして宣言されているUIButtonアニメーションであることがわかりました:CAKeyframeAnimationUIView

    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"];

問題は、アニメーションの後、ボタンがタッチされないことです。アニメーションを削除すると、すべて正常に動作します。誰かが私が間違っていることを知っていますか?

ありがとう

4

3 に答える 3

4

問題は、アニメーションがボタンの表示を変更するだけで、タッチターゲットが以前と同じであるということです。完了後にアニメーションを削除してボタンに変換を設定するか、プレゼンテーション層をテストする必要があります。

アニメーションレイヤーのヒットテストについては、ブログ投稿で詳しく説明しています。

于 2012-10-28T13:36:38.993 に答える
4

kCAFillModeForwards と removedOnCompletion = NO を使用して、アニメーション化されたレイヤーを最終的な位置に固定しないでください。これはコントロールでは機能せず、気付いた動作になります。

代わりに、アニメーションをボタンのレイヤーに追加する前に、ボタンの最終状態を設定します。

self.layer.transform = CGAffineTransformMakeScale(finalScaleX, finalScaleY);
[self.layer addAnimation:group forKey:@"scale"];
于 2012-10-28T09:52:14.297 に答える
2

self.layer.transform = CGAffineTransformMakeScale(finalScaleX, finalScaleY);アニメーションが終了したら、次のコード行を挿入する必要があります。

于 2012-10-29T08:09:31.710 に答える