uiimageView遮罩层、iOS不规则的ImageView
2015-06-26 18:34
651 查看
转自 : http://www.it165.net/pro/html/201411/27187.html
又加以整理
_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];
又加以整理
#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];
相关文章推荐
- NGUI制作字体的三种方法
- Count frequencies of all elements in array in O(1) extra space and O(n) time
- [SoapUI] 循环遍历某个Test Case下的所有Test Step,将Cookie传递给这些Test Step
- HDOJ 题目2670 Girl Love Value(01背包)
- [Groovy]获取当前活动的Environment,获取response中节点的name和节点的value
- IOS-UITextField-改变光标颜色
- [SoapUI] 如何让某个步骤的Assertion失败之后继续执行后面的步骤
- Hibernate之Query接口的uniqueResult()方法
- CruiseControl 配置简述
- openstack安装(el7 + RDO Quickstart)和简单虚拟机创建
- IOS-UITextField-全解
- [SoapUI] 怎样确定一个应答报文的格式是不是标准的JSON
- IOS动画中的枚举UIViewAnimationOptions
- UIStoryboard学习
- [SoapUI] Learn materials
- [SoapUI] Jenkins 配置不同环境(TP, LIVE)
- [SoapUI] Common XPath expressions
- [leetcode] 96.Unique Binary Search Trees
- Unique Binary Search Trees
- [XCode] InterfaceBuilder 误操作导致的uncaught exception 'nsunknownkeyexception'异常