calayer 圖層

曾經(jīng)在有道筆記中記載了大量的學(xué)習(xí)心得筆記,偶然發(fā)現(xiàn)周圍好多在簡書使用的,因此從今以后,我也加入簡書這個(gè)大家庭,將有道筆記中心得分享給大家。清零心態(tài),與大家共同成長。歡迎大家點(diǎn)評,我叫小馬哥!哈哈

前言

1:(圓角、陰影、邊框、3D形變)

知識點(diǎn):CALayer1-簡介 - M了個(gè)J - 博客園

哪些需要引入Quartzcore.framework,并#importCALayer、Core Animation、圖形上下文

2.Core Animation是跨平臺的(iOS和MAC OS X),也就是說Core Animation可以用于iPhone和MAC臺式機(jī)的開發(fā),像UIKit框架就不能用于MAC臺式機(jī)的開發(fā)

(UIKit框架只能應(yīng)用在iOS而不能用于Mac,但是Quartz 2D是可以跨平臺的,因此在使用顏色時(shí),不能直接使用UIColor而需要將顏色轉(zhuǎn)成CGColor)

上下文中是這樣設(shè)置顏色的([[UIColor redColor]set];)

3.每一個(gè)UIView都有一個(gè)Layer屬性

4.CALayer可以做圓角、陰影、邊框、3D形變(包括平移、縮放、旋轉(zhuǎn))

5.3D形變屬性既可以用形變函數(shù)指定,也可以用keyPath指定。區(qū)別在于,形變函數(shù)不能疊加,keyPath可以疊加。

舉例:先平移、再縮放、再旋轉(zhuǎn)。用形變函數(shù)的效果是只進(jìn)行了旋轉(zhuǎn)。用keyPath可以使得平移、縮放、旋轉(zhuǎn)同時(shí)疊加了。

6.UIView通過CALayer可以使得圓角、陰影、邊框、3D形變疊加。

但是UIImageView通過CALayer,圓角和陰影不可同時(shí)運(yùn)用。

?UIImageView中不僅一個(gè)子圖層,因此設(shè)置圓角時(shí)需要使用setMasksToBounds:YES,讓所有子圖層跟隨邊框,不過設(shè)置該屬性后,無法使用陰影效果?解決辦法:可以在底層附加一個(gè)UIView實(shí)現(xiàn)陰影效果

7.關(guān)于圓角的說明

若圓角半徑等于視圖的一半時(shí),那么視圖就變成了一個(gè)圓

8.關(guān)于形變中的旋轉(zhuǎn)(x,y,z):一般設(shè)Z為1,其實(shí)設(shè)多大都沒實(shí)際意義。不用設(shè)置x,y


案例1:

1.UIVIew的layer


- (void)myViewLayerDemo

{

? ? ? // ?自定義UIView的圖層屬性

?? ? ?UIView *myView = [[UIView alloc]initWithFrame:CGRectMake(50, 50, 100, 100)];

? ? ? [myView setBackgroundColor:[UIColor redColor]];

? ? ? ?[self.view addSubview:myView];

? ? ? ?1) 圓角半徑

? ? ? ? myView.layer.cornerRadius = 50.0f;

? ? ? ? 2) 陰影

? ? ? ? // 因?yàn)镃ore Animation是跨平臺的,基于QuartzCore框架,是因?yàn)閁IKit框架,僅能適用于iOS平臺

? ? ? ? // 在Core Animation中不能使用任何跟UI有關(guān)的方法

? ? ? ? // 要設(shè)置陰影除了顏色之外,還需要指定其他偏移量和透明度參數(shù)

? ? ? ? ? ? ?1> 陰影顏色

? ? ? ? ? ? ? [myView.layer setShadowColor:[UIColor lightGrayColor].CGColor];

? ? ? ? ? ? ? 2> 陰影偏移量

? ? ? ? ? ? ?[myView.layer setShadowOffset:CGSizeMake(0, 10)];

? ? ? ? ? ? ?3> 陰影的透明度

? ? ? ? ? ? ?[myView.layer setShadowOpacity:1.0f];

? ? ? ? 3) 邊框

? ? ? ? [myView.layer setBorderColor:[UIColor whiteColor].CGColor];

? ? ? ? [myView.layer setBorderWidth:3.0f];

}

2.UIImageView的layer (這個(gè)特殊,圓角和陰影不能同時(shí)存在 Label圓角也是需要設(shè)定這個(gè))

- (void)myImageLayerDemo

{

? ? ? ? ?UIImage *image = [UIImage imageNamed:@"頭像1.png"];

? ? ? ? ?UIImageView *imageView = [[UIImageView alloc]initWithImage:image];

? ? ? ? ?[imageView setFrame:CGRectMake(50, 50, 200, 200)];

? ? ? ? ?[self.view addSubview:imageView];

? ? ? ? ?// 1. 圓角半徑(UIImageView和UILabel都需要)

? ? ? ? ?// 提示,在imageView中,圖層不止一個(gè),如果要實(shí)現(xiàn)圓角效果,需要設(shè)置一個(gè)遮罩屬性

? ? ? ? ?// masksToBounds屬性可以讓imageView中的所有子圖層跟隨imageView一起變化

? ? ? ? ? imageView.layer.cornerRadius = 50.0f;

? ? ? ? ? [imageView.layer setMasksToBounds:YES];

// 2. 陰影

// 提示,如果設(shè)置了masksToBounds屬性,imageView的陰影效果無效

[imageView.layer setShadowColor:[UIColor redColor].CGColor];

[imageView.layer setShadowOffset:CGSizeMake(10.0, 10.0)];

[imageView.layer setShadowOpacity:1.0];

// 3. 邊框

[imageView.layer setBorderColor:[UIColor blueColor].CGColor];

[imageView.layer setBorderWidth:3.0f];

// 4. 形變屬性,在CALayer中的形變屬性是3D的,不再是2D的

// 提示,形變參數(shù)使用set方法時(shí),只能應(yīng)用一種形變

// 1> 平移屬性(向上移動100個(gè)點(diǎn))

//? ? [imageView.layer setTransform:CATransform3DMakeTranslation(0, -100, 0)];

//? ? // 2> 縮放屬性

//? ? [imageView.layer setTransform:CATransform3DMakeScale(0.5, 1.0, 1.0)];

//? ? // 3> 旋轉(zhuǎn)屬性

//? ? // 提示:通常在旋轉(zhuǎn)時(shí)指定z軸即可,要延哪個(gè)軸旋轉(zhuǎn),指定一個(gè)數(shù)值1.0即可

//? ? // 圖像本身沒有厚度,如果按照x或y旋轉(zhuǎn)90度,圖像是不可見的。

//? ? [imageView.layer setTransform:CATransform3DMakeRotation(M_PI_2, 0, 0, 1.0)];

// 5. 利用keyPath設(shè)置形變,可以組合使用,但是記住不要輸錯(cuò)

// 提示,在文檔中輸入transform3D可以找到對應(yīng)的transform keyPath

// 1)平移

[imageView.layer setValue:@-100 forKeyPath:@"transform.translation.y"];

// 2) 縮放

[imageView.layer setValue:@0.5 forKeyPath:@"transform.scale"];

// 3) 旋轉(zhuǎn)

[imageView.layer setValue:@M_PI_2 forKeyPath:@"transform.rotation.z"];

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 在iOS中隨處都可以看到絢麗的動畫效果,實(shí)現(xiàn)這些動畫的過程并不復(fù)雜,今天將帶大家一窺iOS動畫全貌。在這里你可以看...
    F麥子閱讀 5,143評論 5 13
  • 在iOS中隨處都可以看到絢麗的動畫效果,實(shí)現(xiàn)這些動畫的過程并不復(fù)雜,今天將帶大家一窺ios動畫全貌。在這里你可以看...
    每天刷兩次牙閱讀 8,572評論 6 30
  • 概念 CA -> Core Animation (核心動畫) 相對更底層. CALayer負(fù)責(zé)視圖中顯示內(nèi)容和動畫...
    我是滕先生閱讀 2,197評論 4 40
  • 一.簡介: CALayer類在概念上和UIView類似,同樣也是一些被層級關(guān)系樹管理的矩形塊,同樣也可以包含一些內(nèi)...
    亭竹丶閱讀 1,998評論 0 4
  • 一、 CALayer的簡介 在iOS中,你能看得見摸得著的東西基本上都是UIView,比如一個(gè)按鈕、一個(gè)文本標(biāo)簽、...
    一個(gè)人的思考閱讀 171評論 0 0