CALayer的masking顯示
來自: http://shellcodes.sinaapp.com/articles/526
CALayer有一個BOOL屬性值是masksToBounds,當這個值為TRUE時,他的superLayer中的內容會根據bounds值進行裁剪,也就是說在bounds內的內容會顯示,否則不顯示,配合著CALayer的cornerRadius則可以完成諸如圓角之類的效果。
但有時僅僅圓角的效果是不夠用的,因為這些算事在rect效果上的一些小修改,如果有別的需求,比如一個五角星的相片框,只用上面兩個值是無法實現的。
在這種情況下,CALayer的mask就有用了。CALayer的mask屬性也是一個CALayer,如果我們給這個CALayer賦值為一張PNG的圖片,則UIKit會計算出這個PNG圖片的邊緣區域,結果就是所有在這個區域內的內容會顯示,否則不顯示。
當我們使用如下代碼時,會在屏幕中央顯示一個黑色的圖片
UIImage *image = [UIImage imageNamed:@"Black"];
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
imageView.center = CGPointMake(CGRectGetMidX(self.view.bounds), CGRectGetMidY(self.view.bounds));
imageView.image = image;
[self.view addSubview:imageView];
如下
如果我們加上一個五角星的maskLayer,就完成了我們需要的那種五角星邊框效果,修改后的代碼如下
- (void)drawMaskedImage
{
UIImage *image = [UIImage imageNamed:@"Black"];
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
imageView.center = CGPointMake(CGRectGetMidX(self.view.bounds), CGRectGetMidY(self.view.bounds));
imageView.image = image;
[self.view addSubview:imageView];
CALayer *maskLayer = [[CALayer alloc] init];
maskLayer.frame = imageView.bounds;
UIImage *maskImage = [UIImage imageNamed:@"Star"];
maskLayer.contents = (__bridge id _Nullable)(maskImage.CGImage);
imageView.layer.mask = maskLayer;
}
效果呢,就是剛才所說的那種
本文由用戶 chuanqicc 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!