利用CAShapeLayer在文字上画虚线(UILable举例)

2024-01-03 01:08

本文主要是介绍利用CAShapeLayer在文字上画虚线(UILable举例),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今天看到朋友有个需求,是要在lab的文字下画虚线,感觉很有意思就用CAShapeLayer研究了下,来一起看看吧。


老样子直奔主题上代码:

//
//  ViewController.m
//  DottedLineDemo
//
//  Created by a111 on 16/3/16.
//  Copyright © 2016年 司小文. All rights reserved.
//#import "ViewController.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];self.view.backgroundColor = [UIColor blackColor];[self makeDottedLine];// Do any additional setup after loading the view, typically from a nib.
}#pragma mark 制作虚线
- (void)makeDottedLine{//labNSString *str = @"司小文的博客:http://blog.csdn.net/siwen1990";float strFont = 14.;CGRect labRect = [str boundingRectWithSize:CGSizeMake(MAXFLOAT, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:strFont]} context:nil];UILabel *lab = [[UILabel alloc] initWithFrame:CGRectMake((self.view.frame.size.width-labRect.size.width)/2, 100, labRect.size.width,labRect.size.height)];lab.textColor = [UIColor whiteColor];lab.text = str;lab.font = [UIFont systemFontOfSize:strFont];[self.view addSubview:lab];//layerCAShapeLayer *shapeLayer = [CAShapeLayer layer];[shapeLayer setBounds:lab.bounds];[shapeLayer setPosition:lab.center];[shapeLayer setFillColor:[[UIColor redColor] CGColor]];//设置虚线的颜色 - 颜色请必须设置[shapeLayer setStrokeColor:[[UIColor whiteColor] CGColor]];//设置虚线的高度[shapeLayer setLineWidth:1.0f];//设置类型[shapeLayer setLineJoin:kCALineJoinRound];/*10.f=每条虚线的长度3.f=每两条线的之间的间距*/[shapeLayer setLineDashPattern:[NSArray arrayWithObjects:[NSNumber numberWithInt:10.f],[NSNumber numberWithInt:3.f],nil]];// Setup the pathCGMutablePathRef path1 = CGPathCreateMutable();/*代表初始坐标的x,yx:写-2,是为了视觉上,虚线比文字稍长一点。y:要和下面的y一样。*/CGPathMoveToPoint(path1, NULL,-2, lab.frame.size.height);/*代表坐标的x,ylab.frame.size.width+2:我觉得他代表的意思可以理解为线的长度。lab.frame.size.height:要与上面的y大小一样,才能使平行的线,不然会画出斜线呦~*/CGPathAddLineToPoint(path1, NULL, lab.frame.size.width+2,lab.frame.size.height);//赋值给shapeLayer[shapeLayer setPath:path1];//清除CGPathRelease(path1);//可以把self改成任何你想要的UIView.[[self.view layer] addSublayer:shapeLayer];}- (void)didReceiveMemoryWarning {[super didReceiveMemoryWarning];// Dispose of any resources that can be recreated.
}@end


效果图:



注释写的很清楚但是demo还是要奉上的:

CAShapeLayer画虚线-司小文 (提取码:e684)



感谢观看,学以致用更感谢。



这篇关于利用CAShapeLayer在文字上画虚线(UILable举例)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/564161

相关文章

C语言中位操作的实际应用举例

《C语言中位操作的实际应用举例》:本文主要介绍C语言中位操作的实际应用,总结了位操作的使用场景,并指出了需要注意的问题,如可读性、平台依赖性和溢出风险,文中通过代码介绍的非常详细,需要的朋友可以参... 目录1. 嵌入式系统与硬件寄存器操作2. 网络协议解析3. 图像处理与颜色编码4. 高效处理布尔标志集合

Java中Switch Case多个条件处理方法举例

《Java中SwitchCase多个条件处理方法举例》Java中switch语句用于根据变量值执行不同代码块,适用于多个条件的处理,:本文主要介绍Java中SwitchCase多个条件处理的相... 目录前言基本语法处理多个条件示例1:合并相同代码的多个case示例2:通过字符串合并多个case进阶用法使用

Python中局部变量和全局变量举例详解

《Python中局部变量和全局变量举例详解》:本文主要介绍如何通过一个简单的Python代码示例来解释命名空间和作用域的概念,它详细说明了内置名称、全局名称、局部名称以及它们之间的查找顺序,文中通... 目录引入例子拆解源码运行结果如下图代码解析 python3命名空间和作用域命名空间命名空间查找顺序命名空

Java中使用Hutool进行AES加密解密的方法举例

《Java中使用Hutool进行AES加密解密的方法举例》AES是一种对称加密,所谓对称加密就是加密与解密使用的秘钥是一个,下面:本文主要介绍Java中使用Hutool进行AES加密解密的相关资料... 目录前言一、Hutool简介与引入1.1 Hutool简介1.2 引入Hutool二、AES加密解密基础

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印

java中反射(Reflection)机制举例详解

《java中反射(Reflection)机制举例详解》Java中的反射机制是指Java程序在运行期间可以获取到一个对象的全部信息,:本文主要介绍java中反射(Reflection)机制的相关资料... 目录一、什么是反射?二、反射的用途三、获取Class对象四、Class类型的对象使用场景1五、Class

Java常用注解扩展对比举例详解

《Java常用注解扩展对比举例详解》:本文主要介绍Java常用注解扩展对比的相关资料,提供了丰富的代码示例,并总结了最佳实践建议,帮助开发者更好地理解和应用这些注解,需要的朋友可以参考下... 目录一、@Controller 与 @RestController 对比二、使用 @Data 与 不使用 @Dat

Java中ArrayList和LinkedList有什么区别举例详解

《Java中ArrayList和LinkedList有什么区别举例详解》:本文主要介绍Java中ArrayList和LinkedList区别的相关资料,包括数据结构特性、核心操作性能、内存与GC影... 目录一、底层数据结构二、核心操作性能对比三、内存与 GC 影响四、扩容机制五、线程安全与并发方案六、工程

Java中八大包装类举例详解(通俗易懂)

《Java中八大包装类举例详解(通俗易懂)》:本文主要介绍Java中的包装类,包括它们的作用、特点、用途以及如何进行装箱和拆箱,包装类还提供了许多实用方法,如转换、获取基本类型值、比较和类型检测,... 目录一、包装类(Wrapper Class)1、简要介绍2、包装类特点3、包装类用途二、装箱和拆箱1、装

oracle中exists和not exists用法举例详解

《oracle中exists和notexists用法举例详解》:本文主要介绍oracle中exists和notexists用法的相关资料,EXISTS用于检测子查询是否返回任何行,而NOTE... 目录基本概念:举例语法pub_name总结 exists (sql 返回结果集为真)not exists (s