当前位置: 首页 > news >正文

镇江网站建设工程免费咨询协议

镇江网站建设工程,免费咨询协议,余姚做网站公司,管理咨询公司名字起名大全把我之前发布在简书的博客搬运过来。 目录 场景思路具体实现1. 自定义一个继承自UILabel的IrregularLabel2. 在初始化方法中进行相应初始化和设置3. 在layoutSubviews方法中进行路径的设置 最终效果箭头 label 场景 最近 App 改版,以下是截取的部分 UI 设计图&…

请添加图片描述

把我之前发布在简书的博客搬运过来。


目录

  • 场景
  • 思路
  • 具体实现
    • 1. 自定义一个继承自UILabel的IrregularLabel
    • 2. 在初始化方法中进行相应初始化和设置
    • 3. 在layoutSubviews方法中进行路径的设置
  • 最终效果
  • 箭头 label


场景

最近 App 改版,以下是截取的部分 UI 设计图:

其中有一个不规则的 label

这个 label 顶部的两个角是圆角,底部的两个角是直角,底部还有一个小三角。

思路

CAShapeLayer 联合 UIBezierPath 画一个不规则的 layer 作为 label.layermask

具体实现

1. 自定义一个继承自UILabel的IrregularLabel

#import "IrregularLabel.h"@interface IrregularLabel ()/** 遮罩 */
@property (nonatomic, strong) CAShapeLayer *maskLayer;
/** 路径 */
@property (nonatomic, strong) UIBezierPath *borderPath;@end

2. 在初始化方法中进行相应初始化和设置

- (instancetype)initWithFrame:(CGRect)frame {if (self = [super initWithFrame:frame]) {// 初始化遮罩self.maskLayer = [CAShapeLayer layer];// 设置遮罩[self.layer setMask:self.maskLayer];// 初始化路径self.borderPath = [UIBezierPath bezierPath];}return self;
}

3. 在layoutSubviews方法中进行路径的设置

- (void)layoutSubviews {[super layoutSubviews];// 遮罩层frameself.maskLayer.frame = self.bounds;// 设置path起点[self.borderPath moveToPoint:CGPointMake(0, 10)];// 左上角的圆角[self.borderPath addQuadCurveToPoint:CGPointMake(10, 0) controlPoint:CGPointMake(0, 0)];// 直线,到右上角[self.borderPath addLineToPoint:CGPointMake(self.bounds.size.width - 10, 0)];// 右上角的圆角[self.borderPath addQuadCurveToPoint:CGPointMake(self.bounds.size.width, 10) controlPoint:CGPointMake(self.bounds.size.width, 0)];// 直线,到右下角[self.borderPath addLineToPoint:CGPointMake(self.bounds.size.width, self.bounds.size.height)];// 底部的小三角形[self.borderPath addLineToPoint:CGPointMake(self.bounds.size.width/2+5, self.bounds.size.height)];[self.borderPath addLineToPoint:CGPointMake(self.bounds.size.width/2, self.bounds.size.height-5)];[self.borderPath addLineToPoint:CGPointMake(self.bounds.size.width/2 - 5, self.bounds.size.height)];// 直线,到左下角[self.borderPath addLineToPoint:CGPointMake(0, self.bounds.size.height)];// 直线,回到起点[self.borderPath addLineToPoint:CGPointMake(0, 10)];// 将这个path赋值给maskLayer的pathself.maskLayer.path = self.borderPath.CGPath;
}
  • 左上角的坐标是 (0,0)
  • 右下角的坐标是 (maxX,maxY)

圆角是用的二次贝塞尔曲线,关于二次贝塞尔曲线,我在网上看到一张比较形象的图:

3个点确定一个圆角。

最终效果

- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.self.label = [[IrregularLabel alloc] initWithFrame:CGRectMake(90, 200, 200, 40)];[self.view addSubview:self.label];self.label.text = @"这是一个不规则label";self.label.textAlignment = NSTextAlignmentCenter;self.label.backgroundColor = [UIColor redColor];self.label.textColor = [UIColor whiteColor];self.label.font = [UIFont boldSystemFontOfSize:16];
}

效果图:

在这里插入图片描述


箭头 label

有读者说要带箭头的 label:

在这里插入图片描述

其实思路是一样的:

- (void)layoutSubviews {[super layoutSubviews];// 遮罩层frameself.maskLayer.frame = self.bounds;// 设置path起点[self.borderPath moveToPoint:CGPointMake(0, 10)];// 箭头[self.borderPath addLineToPoint:CGPointMake(self.bounds.size.width/2-5, 10)];[self.borderPath addLineToPoint:CGPointMake(self.bounds.size.width/2, 0)];[self.borderPath addLineToPoint:CGPointMake(self.bounds.size.width/2+5, 10)];// 到右上角[self.borderPath addLineToPoint:CGPointMake(self.bounds.size.width, 10)];// 到右下角[self.borderPath addLineToPoint:CGPointMake(self.bounds.size.width, self.bounds.size.height)];// 到左下角[self.borderPath addLineToPoint:CGPointMake(0, self.bounds.size.height)];// 回到起点[self.borderPath addLineToPoint:CGPointMake(0, 10)];// 将这个path赋值给maskLayer的pathself.maskLayer.path = self.borderPath.CGPath;
}

如果想让文本相对方形框居中,可以在 view 上放一个 label

http://www.yayakq.cn/news/356288/

相关文章:

  • asp网站后台模板企业信息管理平台系统
  • 网站建设企业开发公司潜江做网站的
  • 墨刀做网站网页网站的排版好看
  • 西安企业自助建站k8team wordpress
  • 哪些网站权重高凡科建站建网站
  • 汕头响应式网站东莞手机网站建设多少钱
  • 宜城网站建设莆田网站制作设计
  • 做设计找素材的 网站有哪些彩票网站网站建设
  • 门户网站html信用网站标准化建设
  • 如果做镜像网站手机网页链接制作
  • 海口自助建站大连关键词快速排名
  • 网站开发前端技术趋势网站源码建站教程
  • 个人域名怎么做网站今天泰安刚刚发生的新闻
  • 龙华响应式网站建设怎么在天猫注册开店铺
  • 合肥模板建站多少钱做影视网站推荐哪个服务器
  • 做网站读什么专业wordpress标题
  • 做网站卖产品投资大嘛三合一网站建设什么意思
  • 湛江网站建设开发为什么要给企业建设网站
  • 四川成都企业高端网站建设企业网站建设的层次
  • 网站建设需要编程吗安阳县事业单位招聘2021
  • 做网站可以用自己的主机有没有帮别人做创意的网站
  • 建设化工网站的目的海关企业信息查询网站
  • php的网站怎么做的秦皇岛建网站多少钱
  • 大型网站制作流程想在百度做网站
  • 做网站有什么不好wordpress图片上文字
  • 网站做好第二年要多少钱做视频的网站带模板下载
  • 福州建设工程协会网站查询销售网站建设公司
  • 淄博网站建设哪家好wordpress二次元风格
  • 江苏建设通网站如何发布视频赚钱
  • 商贸公司寮步网站建设小程序免费制作平台