iOS CALayer

// 邊框?qū)挾?self.purpleView.layer.borderWidth = 10;
// 邊框顏色
self.purpleView.layer.borderColor = [UIColor greenColor].CGColor;
// 圓角
self.purpleView.layer.cornerRadius = 10;

//    self.purpleView.layer.masksToBounds = YES;
// 陰影顏色
self.purpleView.layer.shadowColor = [UIColor blueColor].CGColor;
// 陰影偏差
self.purpleView.layer.shadowOffset = CGSizeMake(20, 20);
// 陰影不透明度
self.purpleView.layer.shadowOpacity = 0.5;


// 平移
self.iconView.layer.transform = CATransform3DMakeScale(1.5, 0.5, 0);
// 旋轉(zhuǎn)二維
self.iconView.transform = CGAffineTransformMakeRotation(M_PI_4);
// 旋轉(zhuǎn)三維 方式一
self.iconView.layer.transform = CATransform3DMakeRotation(M_PI_4, 0, 0, 1);

// 旋轉(zhuǎn)三維 方式二
NSValue *value = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI_4, 0, 0, 1)];
[self.iconView.layer setValue:value forKeyPath:@"transform"];

// 旋轉(zhuǎn)
[self.iconView.layer setValue:@(M_PI_2) forKeyPath:@"transform.rotation"];

self.iconView.layer.transform = CATransform3DMakeScale(0.5, 2, 0);
[self.iconView.layer setValue:[NSValue valueWithCATransform3D:CATransform3DMakeScale(0.5, 2, 0)] forKeyPath:@"transform"];

// 可以傳遞哪些key path, 在官方文檔搜索 "CATransform3D key paths"
[self.iconView.layer setValue:@(-100) forKeyPath:@"transform.translation.x"];

key paths

新建圖層

//    CALayer *layer = [[CALayer alloc] init];
CALayer *layer = [CALayer layer];
layer.backgroundColor = [UIColor redColor].CGColor;
layer.bounds = CGRectMake(0, 0, 100, 100);
layer.position = CGPointMake(200, 100);
layer.cornerRadius = 10;
layer.masksToBounds = YES;
layer.contents = (id)[UIImage imageNamed:@"icon"].CGImage;
[self.view.layer addSublayer:layer];

自定義圖層

方式一
繼承自CALayer
/**
 *  只有明顯地調(diào)用setNeedsDisplay方法,才會調(diào)用drawInContext:方法進(jìn)行繪制
 */
- (void)drawInContext:(CGContextRef)ctx
{
    // 紅色
    CGContextSetRGBFillColor(ctx, 1, 0, 0, 1);
    // 添加圓
    CGContextAddEllipseInRect(ctx, CGRectMake(0, 0, 50, 50));
    // 實(shí)心繪制
    CGContextFillPath(ctx);
}

自定義View是這樣的
- (void)drawRect:(CGRect)rect
{
    CGContextRef ctx =  UIGraphicsGetCurrentContext();
    // 紅色
    CGContextSetRGBFillColor(ctx, 1, 0, 0, 1);
    // 添加圓
    CGContextAddEllipseInRect(ctx, CGRectMake(0, 0, 50, 50));
    // 實(shí)心繪制
    CGContextFillPath(ctx);
}


MyLayer *layer = [MyLayer layer];
layer.bounds = CGRectMake(0, 0, 100, 100);
layer.backgroundColor = [UIColor blueColor].CGColor;
layer.anchorPoint = CGPointZero;
[layer setNeedsDisplay];
[self.view.layer addSublayer:layer];


方式二
CALayer *layer = [CALayer layer];
layer.bounds = CGRectMake(0, 0, 100, 100);
layer.backgroundColor = [UIColor blackColor].CGColor;
layer.anchorPoint = CGPointZero;
layer.position = CGPointMake(100, 100);
layer.delegate = self;
[layer setNeedsDisplay];
[self.view.layer addSublayer:layer];


#pragma mark - 圖層的代理方法
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
{
    CGContextSetRGBFillColor(ctx, 1, 0, 0, 1);
    CGContextAddRect(ctx, CGRectMake(0, 0, 20, 20));
    CGContextFillPath(ctx);
}

view的完整顯示過程

  1. view.layer會準(zhǔn)備一個(gè)Layer Graphics Contex(圖層類型的上下文)
  2. 調(diào)用view.layer.delegate(view)的drawLayer:inContext:,并傳入剛才準(zhǔn)備好的上下文
  3. view的drawLayer:inContext:方法內(nèi)部又會調(diào)用view的drawRect:方法
  4. view就可以在drawRect:方法中實(shí)現(xiàn)繪圖代碼, 所有東西最終都繪制到view.layer上面
  5. 系統(tǒng)再將view.layer的內(nèi)容拷貝到屏幕, 于是完成了view的顯示
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末琉闪,一起剝皮案震驚了整個(gè)濱河市虱咧,隨后出現(xiàn)的幾起案子儿惫,更是在濱河造成了極大的恐慌,老刑警劉巖列荔,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件敬尺,死亡現(xiàn)場離奇詭異,居然都是意外死亡贴浙,警方通過查閱死者的電腦和手機(jī)砂吞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來悬而,“玉大人呜舒,你說我怎么就攤上這事”康欤” “怎么了袭蝗?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長般婆。 經(jīng)常有香客問我到腥,道長,這世上最難降的妖魔是什么蔚袍? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任乡范,我火速辦了婚禮,結(jié)果婚禮上啤咽,老公的妹妹穿的比我還像新娘晋辆。我一直安慰自己,他們只是感情好宇整,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布瓶佳。 她就那樣靜靜地躺著,像睡著了一般鳞青。 火紅的嫁衣襯著肌膚如雪霸饲。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天臂拓,我揣著相機(jī)與錄音厚脉,去河邊找鬼。 笑死胶惰,一個(gè)胖子當(dāng)著我的面吹牛傻工,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼中捆,長吁一口氣:“原來是場噩夢啊……” “哼威鹿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起轨香,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎幼东,沒想到半個(gè)月后臂容,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡根蟹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年脓杉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片简逮。...
    茶點(diǎn)故事閱讀 38,018評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡球散,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出散庶,到底是詐尸還是另有隱情蕉堰,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布悲龟,位于F島的核電站屋讶,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏须教。R本人自食惡果不足惜皿渗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望轻腺。 院中可真熱鬧乐疆,春花似錦、人聲如沸贬养。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽煤蚌。三九已至耕挨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間尉桩,已是汗流浹背筒占。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蜘犁,地道東北人翰苫。 一個(gè)月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親奏窑。 傳聞我的和親對象是個(gè)殘疾皇子导披,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容