我的情况:
我有一个UIButton
,它是CAKeyframeAnimation
的动画,在UIView
上被声明为类别:
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 :(得分:4)
您不应该使用kCAFillModeForwards和removedOnCompletion = NO来将动画图层粘贴到最终位置。这不适用于控件,并导致您注意到的行为。
相反,在将动画添加到图层之前设置按钮的最终状态。
self.layer.transform = CGAffineTransformMakeScale(finalScaleX, finalScaleY);
[self.layer addAnimation:group forKey:@"scale"];
答案 1 :(得分:4)
问题是动画只会更改按钮的显示,但触摸目标仍然与之前相同。您应该在完成后删除动画并在按钮上设置变换或者测试表示层。
我写了hit testing animating layers in a blog post,更详细地解释了它。
答案 2 :(得分:2)
动画结束时,您必须插入以下代码行self.layer.transform = CGAffineTransformMakeScale(finalScaleX, finalScaleY);
。