CABasicAnimation簡介
CABasicAnimation是CAPropertyAnimation的子類,使用它可以實現一些基本的動畫效果,它可以讓CALayer的某個屬性從某個值漸變到另一個值。下面就用CABasicAnimation實現幾個簡單的動畫。
先初始化一個view
UIView * greenView = [[UIView alloc] init];
greenView.backgroundColor = [UIColor greenColor];
greenView.frame = CGRectMake(100, 100, 100, 100);
self.greenView = greenView;
[self.view addSubview:greenView];
1>平移動畫<span style="color:#333333;">- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
// 實例化CABasicAnimation對象
CABasicAnimation * anim = [CABasicAnimation animation];
// 設置屬性
anim.keyPath = @"position";
anim.duration = 1.0;
anim.repeatCount = 1;
anim.fromValue = [NSValue valueWithCGPoint:CGPointMake(60, 80)];
anim.toValue = [NSValue valueWithCGPoint:CGPointMake(200, 200)];
</span><span style="color:#ff0000;">anim.fillMode = kCAFillModeForwards;
anim.removedOnCompletion = NO;</span><span style="color:#333333;">
// 將動畫添加到layer上
[self.greenView.layer addAnimation:anim forKey:@"123"];
}
</span>
點擊屏幕從(60,80)移動到(200,200),如果沒有fillMode和remoovedOnCompletion屬性設置的話,在動畫結束後會回到原來的位置(100,100)。
2>縮放動畫
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
// 實例化CABasicAnimation對象
CABasicAnimation * anim = [CABasicAnimation animation];
// 設置屬性
anim.keyPath = @"bounds";
anim.duration = 1.0;
anim.repeatCount = 1;
anim.toValue = [NSValue valueWithCGRect:CGRectMake(100, 100, 30, 30)];
// anim.fillMode = kCAFillModeForwards;
// anim.removedOnCompletion = NO;
// 將動畫添加到layer上
[self.greenView.layer addAnimation:anim forKey:@"123"];
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
// 實例化CABasicAnimation對象
CABasicAnimation * anim = [CABasicAnimation animation];
// 設置屬性
anim.keyPath = @"transform";
anim.duration = 1.0;
anim.repeatCount = 1;
anim.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI_4, 0, 0, 1)];
anim.fillMode = kCAFillModeForwards;
anim.removedOnCompletion = NO;
// 將動畫添加到layer上
[self.greenView.layer addAnimation:anim forKey:@"123"];
}