iOS 避免动画未结束时重复加载动画

最近在做一个日历控件,再给日历控件加上动画(点击按钮能够展现日历,再次点击按钮能够消失日历)时,我遇到了一个问题,连续快速的点击按钮时,日历控件的位置会出人意料的跑偏。

最后,我找到了解决的办法,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,避免动画的重复加载!

你可能感兴趣的:(iOS 避免动画未结束时重复加载动画)