一、首先簡(jiǎn)單的說下UIView的CALayer.
UIView之所以能顯示在屏幕上,完全是因?yàn)樗鼉?nèi)部的一個(gè)圖層,在創(chuàng)建UIView對(duì)象時(shí)勺择,UIView內(nèi)部會(huì)自動(dòng)創(chuàng)建一個(gè)圖層(即CALayer對(duì)象),通過UIView的layer屬性可以訪問這個(gè)層
@property(nonatomic,readonly,retain) CALayer *layer;
當(dāng)UIView需要顯示到屏幕上時(shí)伦忠,會(huì)調(diào)用drawRect:方法進(jìn)行繪圖省核,并且會(huì)將所有內(nèi)容繪制在自己的圖層上,繪圖完畢后昆码,系統(tǒng)會(huì)將圖層拷貝到屏幕上气忠,于是就完成了UIView的顯示邻储。因此,通過操作這個(gè)CALayer對(duì)象旧噪,可以很方便地調(diào)整UIView的一些界面屬性吨娜,比如:陰影、圓角大小舌菜、邊框?qū)挾群皖伾取?br> 總結(jié):UIView本身不具備顯示的功能萌壳,擁有顯示功能的是它內(nèi)部的圖層亦镶。
二日月、這里我們要講的是masksToBounds
如上面所說,我們可以對(duì)UIView設(shè)置它的圓角
<pre><code> UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 120, 120)];
view.backgroundColor = [UIColor blackColor];
view.layer.cornerRadius = 10;
[self.view addSubview:view];</code></pre>
這段代碼會(huì)按照我們的預(yù)想出現(xiàn)圓角效果.
但是當(dāng)我們往view上面添加一個(gè)UILabel或者一個(gè)UIButton的時(shí)候缤骨,下面的代碼就不管用了
<pre><code>UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(20, 0, 30, 30)];
label.text = @"93";
label.textAlignment = NSTextAlignmentCenter;
label.backgroundColor =[UIColor redColor] ;
label.layer.cornerRadius = 15;
[view addSubview:label];</code></pre>
我們需要再設(shè)置一個(gè)屬性爱咬,這個(gè)label的圓角效果才能出來
label.layer.masksToBounds = YES;
這里有一篇關(guān)于CALayer的簡(jiǎn)介,寫得很不錯(cuò). 文大大寫的文章CALayer簡(jiǎn)介