標籤:
#import "ViewController.h"@interface ViewController ()@property (weak, nonatomic) IBOutlet UIView *redView;@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib.}-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { CABasicAnimation *anim = [CABasicAnimation animation]; anim.keyPath = @"position.y"; anim.toValue = @400; /** * 1:CABasicAnimation:主要用於縮放,平移,轉場CATransiton動畫主要用於情境切換,CAKeyFrameAnimation:主要畫面格動畫,主要用於表徵圖抖動等 2:在CABasicAnimation中,設定anim.removedOnCompletion,目的是動畫結束後不刪除動畫,anim.fillMode = kCAFillModeForwards;設定動畫的模式,設定這兩個屬性,可以不讓動畫執行結束後,恢複到原來的位置,而是保留結束動畫的狀態 3:CAAnimationGroup:她會自動執行數組animations裡的動畫 */ // anim.removedOnCompletion = NO;// anim.fillMode = kCAFillModeForwards;// // [self.redView.layer addAnimation:anim forKey:nil]; CABasicAnimation *anim2 = [CABasicAnimation animation]; anim2.keyPath = @"transform.scale"; anim2.toValue = @0.5;// anim2.removedOnCompletion = NO;// anim2.fillMode = kCAFillModeForwards;// [self.redView.layer addAnimation:anim2 forKey:nil]; CAAnimationGroup *group = [CAAnimationGroup animation]; //會自動執行animations數組當中所有的動畫對象 group.animations = @[anim,anim2]; group.removedOnCompletion = NO; group.fillMode = kCAFillModeForwards; [self.redView.layer addAnimation:group forKey:nil]; }@end
可以同時執行多個動畫.
建立組動畫
CAAnimationGroup *group = [CAAnimationGroup animation];
平移
CABasicAnimation *anim = [CABasicAnimation animation];
anim.keyPath = @"position.y";
anim.toValue = @400;
縮放
CABasicAnimation *scaleAnim = [CABasicAnimation animation];
scaleAnim.keyPath = @"transform.scale";
scaleAnim.toValue = @0.5;
設定動畫組屬性
group.animations = @[anim,scaleAnim];
group.removedOnCompletion = NO;
group.fillMode = kCAFillModeForwards;
添加組動畫
[self.redView.layer addAnimation:group forKey:nil];
使用動畫組的好處,不需要每次都去添加動畫,設定動畫完成時的屬性.
只需要把要執行的動畫,添加到動畫組的animations數組當中即可,
最後把組動畫添加到層上面,就會自動執行數組當中的動畫.
動畫完成時設定的屬性也只需要設定一次.
IOS開發核心動畫六:動畫組