IOS如何使用CAShapeLayer实现复杂的View的遮罩效果

所属分类: 软件编程 / IOS 阅读数: 583
收藏 0 赞 0 分享

一、案例演示
最近在整理一个聊天的项目的时候,发送图片的时候,会有一个三角的指向效果,指向这张图片的发送者。服务端返回给我们的图片只是一张矩形的图片,我们如何把一张矩形的图片或者View,加上一层自定义遮罩效果,就是本文要讲的内容。效果演示如下:第一张是一个View的遮罩效果,第二张是UIImageView的遮罩效果。

二、实现机制
在每一View的layer层中有一个mask属性,他就是专门来设置该View的遮罩效果的。该mask本身也是一个layer层。我们只需要生成一个自定义的layer,然后覆盖在需要遮罩的View上面即可。问题就归于如何生成入上图所示的不规则图片的Layer。CAShapeLayer可以根据几个点的依次连线,产生一个闭合空间的layer。如下图所示:

三、实现代码
实现方式为实现了CAShapeLayer的ViewMask的Category。

@implementation CAShapeLayer (ViewMask)

+ (instancetype)createMaskLayerWithView : (UIView *)view{

  CGFloat viewWidth = CGRectGetWidth(view.frame);
  CGFloat viewHeight = CGRectGetHeight(view.frame);

  CGFloat rightSpace = 10.;
  CGFloat topSpace = 15.;

  CGPoint point1 = CGPointMake(0, 0);
  CGPoint point2 = CGPointMake(viewWidth-rightSpace, 0);
  CGPoint point3 = CGPointMake(viewWidth-rightSpace, topSpace);
  CGPoint point4 = CGPointMake(viewWidth, topSpace);
  CGPoint point5 = CGPointMake(viewWidth-rightSpace, topSpace+10.);
  CGPoint point6 = CGPointMake(viewWidth-rightSpace, viewHeight);
  CGPoint point7 = CGPointMake(0, viewHeight);


  UIBezierPath *path = [UIBezierPath bezierPath];
  [path moveToPoint:point1];
  [path addLineToPoint:point2];
  [path addLineToPoint:point3];
  [path addLineToPoint:point4];
  [path addLineToPoint:point5];
  [path addLineToPoint:point6];
  [path addLineToPoint:point7];
  [path closePath];

  CAShapeLayer *layer = [CAShapeLayer layer];
  layer.path = path.CGPath;

  return layer;
}

@end

四、调用方式

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(40, 50, 80, 100)];
view.backgroundColor = [UIColor orangeColor];
[self.view addSubview:view];

CAShapeLayer *layer = [CAShapeLayer createMaskLayerWithView:view];
view.layer.mask = layer;

作者:yixiangboy
地址:http://blog.csdn.net/yixiangboy/article/details/50485250

以上就是本文的全部内容,希望对大家学习IOS程序设计有所帮助。

更多精彩内容其他人还在看

iOS基础动画教程分享

这篇文章主要为大家详细介绍了iOS几种基础动画教程,包括位置动画、透明度动画、大小动画等,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

iOS如何获取屏幕宽高、设备型号、系统版本信息

这篇文章主要介绍了iOS如何获取屏幕宽高、设备型号、系统版本信息的相关代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

iOS中给自定义tabBar的按钮添加点击放大缩小的动画效果

这篇文章主要介绍了iOS中给自定义tabBar的按钮添加点击放大缩小的动画效果的相关资料,非常不错,具有参考解决价值,需要的朋友可以参考下
收藏 0 赞 0 分享

详解iOS使用Keychain中的kSecClassGenericPassword存储数据

iOS设备中的Keychain是一个安全的存储容器,本篇文章主要介绍了iOS使用Keychain中的kSecClassGenericPassword存储数据,有兴趣的可以了解一下。
收藏 0 赞 0 分享

详解IOS四种保存数据的方式

本篇文章主要介绍了OS四种保存数据的方式,现在分享给大家,也给大家做个参考。感兴趣的小伙伴们可以参考一下。
收藏 0 赞 0 分享

iOS图片界面翻页切换效果

这篇文章主要为大家详细介绍了iOS图片界面翻页切换效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

IOS中对Url进行编码和解码示例

本篇文章主要介绍了IOS中对Url进行编码和解码示例,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

iOS实现圆角箭头矩形的提示框

不知道大家发现了没,在现在的很多App中常使用圆角箭头矩形, 如微博分组提示框, 地图坐标显示点等。iPad 中有 UIPopoverController 类供开发使用, iPhone中就需要开发人员定制了。那么下面这篇文中就来聊聊定制圆角箭头矩形提示框,有需要的朋友们可以参考借
收藏 0 赞 0 分享

iOS将视频录像切成一张张缩略图

这篇文章主要为大家详细介绍了iOS将视频录像切成一张张缩略图的相关代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

iOS获取验证码倒计时效果

这篇文章主要为大家详细介绍了iOS获取验证码倒计时效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享
查看更多