每一個UIView內部都默認關聯(lián)著一個CALayer憔杨,我們可用稱這個Layer為Root Layer(根層)
鸟赫。
所有的非Root Layer,也就是手動創(chuàng)建的CALayer對象消别,都存在著隱式動畫抛蚤。
什么是隱式動畫?
當對非Root Layer的部分屬性進行修改時寻狂,默認會自動產(chǎn)生一些動畫效果岁经,而這些屬性稱為Animatable Properties
(可動畫屬性)
列舉幾個常見的Animatable Properties
:
bounds
:用于設置CALayer
的寬度和高度。修改這個屬性會產(chǎn)生縮放動畫蛇券。
backgroundColor
:用于設置CALayer
的背景色缀壤。修改這個屬性會產(chǎn)生背景色的漸變動畫。
position
:用于設置CALayer
的位置纠亚。修改這個屬性會產(chǎn)生平移動畫塘慕。
那么需要怎么才能關閉隱式動畫?
通過事務來設置隱式動畫開關
#import "ViewController.h"
@interface ViewController ()
/** 自定義的layer層*/
@property (weak, nonatomic) CALayer *layer;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
CALayer *layer = [[CALayer alloc] init];
layer.frame = CGRectMake(0, 0, 100, 100);
layer.backgroundColor = [UIColor redColor].CGColor;
layer.position = CGPointZero;
[self.view.layer addSublayer:layer];
self.layer = layer;
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
// 開啟一個事務
[CATransaction begin];
// 取消隱式動畫 NO:不取消蒂胞,YES:取消
[CATransaction setDisableActions:YES];
// 動畫時間
[CATransaction setAnimationDuration:2.0];
self.layer.position = self.view.center;
self.layer.cornerRadius = 50;
// 提交事務
[CATransaction commit];
}
@end