1

我需要向 UIButton 添加动画 - 简单的移动动画。当我这样做时,按钮会移动,但该按钮的点击区域仍保持在旧位置:

UIButton *slideButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[slideButton addTarget:self action:@selector(clicked:) forControlEvents:UIControlEventTouchUpInside];
[slideButton setFrame:CGRectMake(50, 50, 50, 50)];
[self.view addSubview:slideButton];

CABasicAnimation *slideAnimation = [CABasicAnimation animationWithKeyPath:@"position"];
[slideAnimation setRemovedOnCompletion:NO];
[slideAnimation setDuration:1];
[slideAnimation setFillMode:kCAFillModeBoth];
[slideAnimation setAutoreverses:NO];

slideAnimation.fromValue = [NSValue valueWithCGPoint:CGPointMake(50, 50)];
slideAnimation.toValue = [NSValue valueWithCGPoint:CGPointMake(100, 100)];
[slideButton.layer addAnimation:slideAnimation forKey:@"slide"];

我已经看到了在动画结束时更改按钮框架的答案(就像这里UIButton 在 CABasicAnimaton 之后的错误位置接收 touchEvents)但这不是我的情况,因为我应该让用户有可能在单击按钮时单击按钮它正在移动......另外,我不能使用其他方法(如 NSTimer)作为 CABasicAnimation 的替代品,因为我将有一个复杂的路径来移动对象......

感谢您的帮助!

4

1 回答 1

0

好吧,我发现它与 CABasicAnimation 不太可能有关。Coz 动画循环在视图中为图层对象设置动画,但视图本身保持不变,无论 CABasicAnimation 对象设置了什么属性。

经过几个小时的谷歌搜索,我发现了 MICHAEL TYSON 开发的一个很酷的功能:http: //atastypixel.com/blog/key-path-based-property-animation/

我对其进行了一些改进 - 添加了:autoreverse、repeatCount、cumulative、timeOffset、byValue .. 瞧!几乎相同的 CABasicAnimation - 但能够动画帧!

于 2012-12-20T15:14:03.757 回答