當(dāng)UIView需要顯示到屏幕上時简卧,會調(diào)用drawRect:方法進(jìn)行繪圖扣墩,并且會將所有內(nèi)容繪制在自己的圖層上,繪圖完畢后鞍爱,系統(tǒng)會將圖層拷貝到屏幕上,于是就完成了UIView的顯示专酗,這里的圖層就是CALayer睹逃。
CALayer的常用屬性:
邊框顏色(CGColorRef類型)
@property CGColorRef borderColor;
邊框?qū)挾?@property CGFloat borderWidth;
圓角半徑
@property CGColorRef borderColor;
內(nèi)容(比如設(shè)置為圖片CGImageRef)
@property(retain) id contents;
寬度和高度
@property CGRect bounds;
位置(默認(rèn)指中點,具體由anchorPoint決定)
@property CGPoint position;
錨點(x,y的范圍都是0-1)祷肯,決定了position的含義
@property CGPoint anchorPoint;
背景顏色(CGColorRef類型)
@property CGColorRef backgroundColor;
形變屬性
@property CATransform3D transform;
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self testView];
// [self testImageView];
[self testImageView2];
}
-(void)testImageView2
{
// self.myImageView.transform = CGAffineTransformMakeRotation(M_PI_4);
// self.myImageView.layer.transform = CATransform3DMakeScale(2, 1, 0);
// CATransform3DMakeRotation(M_PI_4, 0, 0, 1)以Z軸為旋轉(zhuǎn)中心
// self.myImageView.layer.transform = CATransform3DMakeRotation(M_PI_4, 0, 0, 1);
// self.myImageView.layer.transform = CATransform3DMakeTranslation(10, 20, 0);
// CATransform3DMakeRotation(M_PI_4, 1, 1, 0)以X沉填,Y軸所在平面的中心線為旋轉(zhuǎn)中心
[self.myImageView.layer setValue:[NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI_4, 1, 1, 0)] forKey:@"transform"];
}
-(void)testImageView
{
//邊框顏色
self.myImageView.layer.borderColor = [UIColor blackColor].CGColor;
//邊框?qū)挾? self.myImageView.layer.borderWidth = 2;
//圓角
self.myImageView.layer.cornerRadius = 20;
//陰影顏色
self.myImageView.layer.shadowColor = [UIColor blackColor].CGColor;
//陰影偏移量
self.myImageView.layer.shadowOffset = CGSizeMake(10, 5);
//陰影透明度
self.myImageView.layer.shadowOpacity = 0.5;
//超出部分是否裁剪掉
//圖片是在自層上繪制的,不設(shè)置layer層超出裁剪佑笋,圖片圓角設(shè)置無效拜轨,設(shè)置了陰影無效
self.myImageView.layer.masksToBounds = NO;
}
-(void)testView
{
//邊框顏色
self.myView.layer.borderColor = [UIColor blackColor].CGColor;
//邊框?qū)挾? self.myView.layer.borderWidth = 2;
//圓角
self.myView.layer.cornerRadius = 10;
//陰影顏色
self.myView.layer.shadowColor = [UIColor blackColor].CGColor;
//陰影偏移量
self.myView.layer.shadowOffset = CGSizeMake(10, 5);
//陰影透明度
self.myView.layer.shadowOpacity = 0.5;
//超出部分是否裁剪掉
self.myView.layer.masksToBounds = NO;
}
@end
隱式動畫:
當(dāng)對非Root Layer的部分屬性進(jìn)行修改時,默認(rèn)會自動產(chǎn)生一些動畫效果允青,而這些屬性稱為Animatable Properties(可動畫屬性)
-(void)testLayer
{
self.layer = [CALayer layer];
self.layer.bounds = CGRectMake(0, 0, 100, 100);
self.layer.position = CGPointZero;
self.layer.backgroundColor = [UIColor blueColor].CGColor;
self.layer.anchorPoint = CGPointZero;
[self.view.layer addSublayer:self.layer];
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
//可以通過動畫事務(wù)(CATransaction)關(guān)閉默認(rèn)的隱式動畫效果
[CATransaction begin];//開啟事務(wù)
[CATransaction setDisableActions:YES];//關(guān)閉事件
self.layer.position = CGPointMake(100, 300);
[CATransaction commit];//提交事務(wù)
}