最近在做一个日历控件,再给日历控件加上动画(点击按钮能够展现日历,再次点击按钮能够消失日历)时,我遇到了一个问题,连续快速的点击按钮时,日历控件的位置会出人意料的跑偏。
最后,我找到了解决的办法,demo的代码如下:
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIView *greenView;
@end
@implementation ViewController
- (IBAction)btnClick:(id)sender {
[UIView animateWithDuration:1.0 animations:^{
if (self.greenView.layer.animationKeys) {
return;
}
NSLog(@"%@", self.greenView.layer.animationKeys.lastObject);
self.greenView.transform = CGAffineTransformRotate(self.greenView.transform, M_PI_2);
}];
}
- 我们通过
self.greenView.layer.animationKeys
能够拿到作用到当前控件layer上的动画keys (返回值为一数组),当其值不为空时说明此时控件还在执行着动画,此时return,避免动画的重复加载!