CALayer屬性mask

CALayer的屬性mask,mask也是一個layer,這邊稱它為maskLayer。介紹中描述

An optional layer whose alpha channel is used to mask the layer’s content.
The layer’s alpha channel determines how much of the layer’s content and background shows through. Fully or partially opaque pixels allow the underlying content to show through but fully transparent pixels block that content.

maskLayer的alpha值決定其內容和背景有多少顯示。不透明和半透明的地方可以讓其內容顯示,透明的地方內容不顯示;先舉個栗子??

test 1

- (void)setUpGradientLayerWithNotTransport
{
    //創建一個view,背景顏色是灰色
    UIView *view = [[UIView alloc]initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight)];
    view.backgroundColor = [UIColor grayColor];
    [self.view addSubview:view];
    
    //采用CAGradientLayer實現顏色漸變,來測試是不是transport會讓內容消失
    CAGradientLayer *gradientLayer = [CAGradientLayer layer];
    gradientLayer.frame = CGRectMake((kScreenWidth - 100)/2,(kScreenHeight -100)/2 , 100, 100);
    
    //設置三種顏色,黑、紅、透明
    [gradientLayer setColors:[NSArray arrayWithObjects:
                             (id)[[UIColor blackColor] CGColor],
                             (id)[[UIColor redColor] CGColor],
                             (id)[[UIColor clearColor] CGColor],
                             nil]];
    
    [gradientLayer setLocations:[NSArray arrayWithObjects:@0.0f, @0.5f, @1.0f, nil]];
    gradientLayer.startPoint = CGPointMake(0, 0);
    gradientLayer.endPoint = CGPointMake(0, 1.0f);
    
    //設置view的mask
    [view.layer setMask:gradientLayer];
}

運行結果如下:

屏幕快照 2016-07-29 下午3.29.59.png

原本view是整個屏幕大小,背景是灰色;gradientLayer是屏幕中心一個100*100的正方形,其顏色值最后一個是[UIColor clearColor],alpha值為0,而其余兩個顏色值alpha值為1,可以從圖中看到view只有中心一塊顯示,并且底部有白色漸變。

test 2

如果將gradientLayer的顏色換掉,替換代碼如下:

    //設置三種顏色,黑、紅、黃
    [gradientLayer setColors:[NSArray arrayWithObjects:
                              (id)[[UIColor blackColor] CGColor],
                              (id)[[UIColor redColor] CGColor],
                              (id)[[UIColor clearColor] CGColor],
                              nil]];

運行結果如下:

屏幕快照 2016-07-29 下午3.32.21.png

view只有中心一塊顯示,但是全是灰色,沒有漸變,因為三個顏色的alpha都為1,layer的內容全部顯示。

test 3

讓結果更直觀可見,可以選擇

    gradientLayer.backgroundColor = [[UIColor colorWithRed:0.716 green:1.000 blue:0.536 alpha:0.3] CGColor];
    //這邊不需要用gradientLayer;可以用普通Layer
    CALayer *layer = [CALayer layer];
    layer.frame = CGRectMake((kScreenWidth - 100)/2,(kScreenHeight -100)/2 , 100, 100);
    layer.backgroundColor = ([[UIColor colorWithRed:1.000 green:0.320 blue:0.608 alpha:0.259] CGColor]);

直接改變alpha通道,可以發現layer的原內容主體顏色不變,通透度變化,這邊插播一個xcode中方便選取顏色的插件ColorSense

注意點
The layer you assign to this property must not have a superlayer. If it does, the behavior is undefined.

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

推薦閱讀更多精彩內容

  • “人的一生要經歷什么都是有定數的,上天對我們的命運早就做了安排。就連現在你我之間的談話也是被安排好的,沒有誰 能夠...
    吟唱者閱讀 162評論 0 0
  • 一個人的時候總是顯得那么落寞 一個人的時候也容易傷感 一個人的時候容易想要放棄這個世界 一個人的時候 尤其是二十歲...
    火星小喵閱讀 207評論 0 1