掌握
CALayer的基本屬性
CALayer和UIView的關係
position和anchorPoint的做用動畫
//邊框寬度(在Layer上圈出一塊出來做爲邊框) self.purpleView.layer.borderWidth = 10; //邊框顏色 self.purpleView.layer.borderColor = [UIColor redColor] .CGColor; //圓角 self.purpleView.layer.cornerRadius = 10; //陰影顏色 self.purpleView.layer.shadowColor = [UIColor redColor] .CGColor; //陰影誤差 self.purpleView.layer.shadowOffset = CGSizeMake(10,10); //陰影不透明度 self.purpleView.layer.shadowOpacity = 0.5; //剪掉超出邊框的部分(圓角與陰影不能共存,除非圖片原本就是圓角的) self.purpleView.layer.masksToBounds = YES; 注意事項:若是隻設置imageView中Layer的圓角屬性,被設置的是主層,而圖片是在子層的,子層會蓋住圓角的主層,因此看上去好像沒有設置同樣,這時還須要設置masksToBounds屬性,將超出主層的部分剪掉。就能看到圓角了。 //三維縮放 self.purpleView.layer.transform = CATransform3DMakeScale(1.5,0.5,0); //三維旋轉(鏈接原點和點1,1,0的線,以這根線爲軸向內旋轉45度) self.purpleView.layer.transform = CATransform3DMakeRotation(M_PI_4,1,1,0); //利用圖層二維旋轉 //能夠傳遞哪些key path,在官方文檔搜索 CATransform3D key paths [self.iconView.layer setValue:@(M_PI_2) forKeyPath:@"transform.rotation"];
1、建立新圖層spa
// 新建圖層 CALayer *layer = [CALayer layer]; //設置背景顏色,邊框和位置 layer.backgroundColor = [UIColor redColor].CGColor; layer.bounds = CGRectMake(0,0,100,100); layer.position = CGPointMake(200,100); //設置內容 layer.contents = (id)[UIImage imageNamed:@"lufy"].CGImage; //添加圖層 [self.view.layer addSublayer:layer];
2、position和anchorPoint3d
3、隱式動畫代理
4、自定義圖層(自定義圖層不須要本身搞上下文,而自定義View還須要本身搞上下文)
1.新建一個MJLayer,來到MJLayer.m,實現drawInContext:方法code
//只有明顯地調用setNeedsDisplay方法,纔會自動調用drawInContext:方法進行繪製 -(void)drawInContext:(CGContextRef)ctx { //紅色(不能用UIColor) CGContextSetRGBFillColor(ctx,1,0,0,1); //添加圓 CGContextAddEllipseInRect(ctx,CGRectMake(0,0,50,50)); //實心繪製 CGContextFillPath(ctx); }
3.來到MJViewController的viewDidLoad方法orm
-(void)viewDidLoad { [super viewDidLoad]; //建立圖層 MJLayer *layer = [MJLayer layer]; //設置寬高,背景顏色,錨點 layer.bounds = CGRectMake(0,0,100,100); layer.backgroundColor = [UIColor redColor].CGColor; layer.anchorPoint = CGPointZero; //調用setNeedsDisplay方法(這樣系統就會自動調用drawInContext:方法) [layer setNeedsDisplay]; //添加圖層 [self.view.layer addSublayer:layer]; }
PS:用代理方法畫圖(瞭解便可,無需掌握)blog
self.view.layer.delegate == self.view 圖片
//View內部圖層的代理就是View自己,View的圖層怎麼畫東西由View來決定。因此由View來實現drawInRect方法進行畫圖 ,切記不能把代理設置爲self(控制器)
PS:一個View內部圖層的代理是不能修改的。一個View也不能成爲其餘圖層的代理。ip