博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
任意形状的ImageView
阅读量:6931 次
发布时间:2019-06-27

本文共 4789 字,大约阅读时间需要 15 分钟。

运行效果:

ZWImageView.h中代码:

#import 
@interface ZWImageView : UIView/** * path:形状 */@property (nonatomic, assign) CGPathRef path;/** * image:图片 */@property (nonatomic, strong) UIImage *image;- (instancetype)init;- (instancetype)initWithFrame:(CGRect)frame;- (instancetype)initWithFrame:(CGRect)frame path:(CGPathRef)path image:(UIImage *)image;@end复制代码

ZWImageView.m中代码:

#import "ZWImageView.h"@implementation ZWImageView{    CAShapeLayer *maskLayer;    CALayer *contentLayer;}/*// Only override drawRect: if you perform custom drawing.// An empty implementation adversely affects performance during animation.- (void)drawRect:(CGRect)rect {    // Drawing code}*/- (instancetype)init{    self = [super init];    if (self) {        self.backgroundColor = [UIColor clearColor];        [self setUpLayers];    }    return self;}- (instancetype)initWithFrame:(CGRect)frame{    self = [super initWithFrame:frame];    if (self) {        self.backgroundColor = [UIColor clearColor];        [self setUpLayers];    }    return self;}- (instancetype)initWithFrame:(CGRect)frame path:(CGPathRef)path image:(UIImage *)image{    self = [super initWithFrame:frame];    if (self) {        _path = path;        _image = image;        [self setUpLayers];    }    return self;}- (void)setUpLayers{    maskLayer = [[CAShapeLayer alloc] init];    maskLayer.frame = self.bounds;    maskLayer.fillColor = [UIColor blackColor].CGColor;    maskLayer.strokeColor = [UIColor redColor].CGColor;    //拉伸范围//    maskLayer.contentsCenter = CGRectMake(0.5, 0.5, 0.1, 0.1);    maskLayer.contentsScale = [UIScreen mainScreen].scale;    maskLayer.path = _path;        contentLayer = [CALayer layer];    contentLayer.frame = self.bounds;    //居中裁剪    contentLayer.contentsGravity = kCAGravityResizeAspectFill;    contentLayer.mask = maskLayer;    contentLayer.contents = (__bridge id _Nullable)(_image.CGImage);    [self.layer addSublayer:contentLayer];}- (void)setFrame:(CGRect)frame{    [super setFrame:frame];    maskLayer.frame = self.bounds;    contentLayer.frame = self.bounds;}- (void)setPath:(CGPathRef)path{    _path = path;    maskLayer.path = path;}- (void)setImage:(UIImage *)image{    _image = image;    contentLayer.contents = (__bridge id _Nullable)(image.CGImage);}@end复制代码

使用方法:

//三角形    UIBezierPath *path1 = [[UIBezierPath alloc] init];    path1.lineCapStyle = kCGLineCapRound;    path1.lineJoinStyle = kCGLineJoinRound;    [path1 moveToPoint:CGPointMake(25, 0)];    [path1 addLineToPoint:CGPointMake(0, 50)];    [path1 addLineToPoint:CGPointMake(50, 50)];    [path1 fill];        ZWImageView *imageView1 = [[ZWImageView alloc] initWithFrame:CGRectMake(20, 100, 50, 50) path:path1.CGPath image:[UIImage imageNamed:@"示例图"]];    [self.view addSubview:imageView1];        //波浪    UIBezierPath *path2 = [[UIBezierPath alloc] init];    path2.lineCapStyle = kCGLineCapRound;    path2.lineJoinStyle = kCGLineJoinRound;    [path2 moveToPoint:CGPointMake(0, 50)];    [path2 addLineToPoint:CGPointMake(0, 25)];    //    [path addArcWithCenter:CGPointMake(50, 50) radius:50 startAngle:M_PI endAngle:M_PI_2 clockwise:YES];    [path2 addCurveToPoint:CGPointMake(50, 25) controlPoint1:CGPointMake(15, 15) controlPoint2:CGPointMake(35, 35)];    [path2 addLineToPoint:CGPointMake(50, 50)];    [path2 fill];        ZWImageView *imageView2 = [[ZWImageView alloc] initWithFrame:CGRectMake(120, 100, 50, 50) path:path2.CGPath image:[UIImage imageNamed:@"示例图"]];    [self.view addSubview:imageView2];        //椭圆形    UIBezierPath *path3 = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 5, 50, 100)];    [path3 fill];        ZWImageView *imageView3 = [[ZWImageView alloc] initWithFrame:CGRectMake(220, 100, 50, 120) path:path3.CGPath image:[UIImage imageNamed:@"示例图"]];    [self.view addSubview:imageView3];            //扇形    UIBezierPath *path4 = [[UIBezierPath alloc] init];    [path4 moveToPoint:CGPointMake(50, 100)];    [path4 addLineToPoint:CGPointMake(0, 50)];    [path4 addArcWithCenter:CGPointMake(50, 100) radius:70.7 startAngle:M_PI_4 * 5 endAngle:M_PI_4 * 7 clockwise:YES];    [path4 fill];        ZWImageView *imageView4 = [[ZWImageView alloc] initWithFrame:CGRectMake(20, 180, 100, 100) path:path4.CGPath image:[UIImage imageNamed:@"示例图"]];    [self.view addSubview:imageView4];        //四分之三圆    UIBezierPath *path5 = [[UIBezierPath alloc] init];    [path5 moveToPoint:CGPointMake(0, 100)];    [path5 addLineToPoint:CGPointMake(0, 50)];    [path5 addArcWithCenter:CGPointMake(50, 50) radius:50 startAngle:M_PI endAngle:M_PI_2 clockwise:YES];    [path5 fill];        ZWImageView *imageView5 = [[ZWImageView alloc] initWithFrame:CGRectMake(20, 300, 100, 100) path:path5.CGPath image:[UIImage imageNamed:@"示例图"]];    [self.view addSubview:imageView5];复制代码

ZWImageviewpath属性为CGPathRef类型,可以传入任意想要的形状。

转载地址:http://soqjl.baihongyu.com/

你可能感兴趣的文章
标准模板库(STL)学习指南之map映射
查看>>
CentOS7.X的系统管理、安全设置及系统优化思路
查看>>
npm全局安装和本地安装和本地开发安装(npm install --g/--save/--save-dev)
查看>>
20个非常有用的Java程序片段
查看>>
喧喧发布 2.5.2 版本,主要修复已知问题
查看>>
人工智能技术在移动互联网发展中的应用
查看>>
微软开源 Quantum Katas,领先的量子编程解决方案
查看>>
PHP date函数参数详解
查看>>
DDoS攻击走向应用层
查看>>
智领新时代 慧享新生活 —— CITE2018新闻发布会在北京召开
查看>>
探秘区块链 - 头条新闻
查看>>
区块链应用 | 用区块链颠覆视频直播,与视频卡顿、缓冲说再见!
查看>>
Python的pyroute2网络模块
查看>>
从零开始学Win32平台缓冲区溢出(Part1)
查看>>
一朵为员工赋能的“美”云
查看>>
PostgreSQL Oracle 兼容性之 - PL/SQL DETERMINISTIC 与PG函数稳定性(immutable, stable, volatile)...
查看>>
万万想不到,你是这样的“闲鱼”!
查看>>
Logstash 推送告警到阿里钉钉(Dingtalk)
查看>>
软银机器人Pepper上岗必胜客,顾客可通过机器人预订披萨
查看>>
较主流的消息队列的比较与选型
查看>>