uiimageView遮罩层、iOS不规则的ImageView

来源:互联网 发布:115会员充值 淘宝 编辑:程序博客网 时间:2024/06/07 02:19

转自 : http://www.it165.net/pro/html/201411/27187.html

又加以整理


#import "ShapedImageView.h"@interface ShapedImageView(){    CALayer      *_contentLayer;    CAShapeLayer *_maskLayer;}@end@implementation ShapedImageView- (instancetype)initWithFrame:(CGRect)frame{    self = [super initWithFrame:frame];    if (self) {        [self setup];    }    return self;}- (void)setup{    _maskLayer = [CAShapeLayer layer];    _maskLayer.path = [UIBezierPath bezierPathWithOvalInRect:self.bounds].CGPath;    _maskLayer.fillColor = [UIColor blackColor].CGColor;    _maskLayer.strokeColor = [UIColor redColor].CGColor;    _maskLayer.frame = self.bounds;    _maskLayer.contentsCenter = CGRectMake(0.5, 0.5, 0.1, 0.1);    _maskLayer.contentsScale = [UIScreen mainScreen].scale;        _contentLayer = [CALayer layer];    _contentLayer.mask = _maskLayer;    _contentLayer.frame = self.bounds;    [self.layer addSublayer:_contentLayer];    }- (void)setImage:(UIImage *)image{    _contentLayer.contents = (id)image.CGImage;}@end


_maskLayer = [CAShapeLayer layer];_maskLayer.path = [UIBezierPath bezierPathWithRoundedRect:self.bounds cornerRadius:20].CGPath;_maskLayer.fillColor = [UIColor blackColor].CGColor;_maskLayer.strokeColor = [UIColor redColor].CGColor;_maskLayer.frame = self.bounds;_maskLayer.contentsCenter = CGRectMake(0.5, 0.5, 0.1, 0.1);_maskLayer.contentsScale = [UIScreen mainScreen].scale;                 //非常关键设置自动拉伸的效果且不变形_contentLayer = [CALayer layer];_contentLayer.mask = _maskLayer;_contentLayer.frame = self.bounds;[self.layer addSublayer:_contentLayer];



CGMutablePathRef path = CGPathCreateMutable();CGPoint origin = self.bounds.origin;CGFloat radius = CGRectGetWidth(self.bounds) / 2;CGPathMoveToPoint(path, NULL, origin.x, origin.y + 2 *radius);CGPathMoveToPoint(path, NULL, origin.x, origin.y + radius);CGPathAddArcToPoint(path, NULL, origin.x, origin.y, origin.x + radius, origin.y, radius);CGPathAddArcToPoint(path, NULL, origin.x + 2 * radius, origin.y, origin.x + 2 * radius, origin.y + radius, radius);CGPathAddArcToPoint(path, NULL, origin.x + 2 * radius, origin.y + 2 * radius, origin.x + radius, origin.y + 2  * radius, radius);CGPathAddLineToPoint(path, NULL, origin.x, origin.y + 2 * radius);_maskLayer = [CAShapeLayer layer];_maskLayer.path = path;_maskLayer.fillColor = [UIColor blackColor].CGColor;_maskLayer.strokeColor = [UIColor clearColor].CGColor;_maskLayer.frame = self.bounds;_maskLayer.contentsCenter = CGRectMake(0.5, 0.5, 0.1, 0.1);_maskLayer.contentsScale = [UIScreen mainScreen].scale;                 //非常关键设置自动拉伸的效果且不变形_contentLayer = [CALayer layer];_contentLayer.mask = _maskLayer;_contentLayer.frame = self.bounds;[self.layer addSublayer:_contentLayer];




    _maskLayer = [CAShapeLayerlayer];

    _maskLayer.fillColor = [UIColorblackColor].CGColor;

    _maskLayer.strokeColor = [UIColorclearColor].CGColor;

    _maskLayer.frame = self.bounds;

    _maskLayer.contentsCenter =CGRectMake(0.5,0.5,0.1,0.1);

    _maskLayer.contentsScale = [UIScreenmainScreen].scale;

    //非常关键设置自动拉伸的效果且不变形

    _maskLayer.contents = (id)[UIImageimageNamed:@"gray_bubble_right@2x.png"].CGImage;

    _contentLayer = [CALayer layer];

    _contentLayer.mask = _maskLayer;

    _contentLayer.frame = self.bounds;

    [self.layer addSublayer:_contentLayer];

gray_bubble_right就是你想要的形状,运行效果如下:






    UIImageView *imageView = [[UIImageViewalloc]initWithFrame:CGRectMake(0,0,200,300)];

    //这里就是我们需要显示的图片

    imageView.image =[UIImageimageNamed:@"1.jpg"];

    [self.viewaddSubview:imageView];

 

    

    CAShapeLayer* maskLayer = [CAShapeLayerlayer];

    maskLayer.frame = imageView.frame;

    maskLayer.contentsScale = [UIScreenmainScreen].scale;

    maskLayer.contentsCenter =CGRectMake(0.5,0.5,0.1,0.1);

    maskLayer.contents = (id)[UIImageimageNamed:@"communication_chat_right.png"].CGImage;

    [imageView.layersetMask:maskLayer];

    


0 0
原创粉丝点击