iOS高級-QuartzCore框架-CALayer圖層

掌握
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和anchorPoint
3d

 

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

相關文章
相關標籤/搜索