利用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

相关文章

Python包管理工具核心指令uvx举例详细解析

《Python包管理工具核心指令uvx举例详细解析》:本文主要介绍Python包管理工具核心指令uvx的相关资料,uvx是uv工具链中用于临时运行Python命令行工具的高效执行器,依托Rust实... 目录一、uvx 的定位与核心功能二、uvx 的典型应用场景三、uvx 与传统工具对比四、uvx 的技术实

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.

Java中常见队列举例详解(非线程安全)

《Java中常见队列举例详解(非线程安全)》队列用于模拟队列这种数据结构,队列通常是指先进先出的容器,:本文主要介绍Java中常见队列(非线程安全)的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一.队列定义 二.常见接口 三.常见实现类3.1 ArrayDeque3.1.1 实现原理3.1.2

Vue 2 项目中配置 Tailwind CSS 和 Font Awesome 的最佳实践举例

《Vue2项目中配置TailwindCSS和FontAwesome的最佳实践举例》:本文主要介绍Vue2项目中配置TailwindCSS和FontAwesome的最... 目录vue 2 项目中配置 Tailwind css 和 Font Awesome 的最佳实践一、Tailwind CSS 配置1. 安

CSS3 布局样式及其应用举例

《CSS3布局样式及其应用举例》CSS3的布局特性为前端开发者提供了无限可能,无论是Flexbox的一维布局还是Grid的二维布局,它们都能够帮助开发者以更清晰、简洁的方式实现复杂的网页布局,本文给... 目录深入探讨 css3 布局样式及其应用引言一、CSS布局的历史与发展1.1 早期布局的局限性1.2

rust 中的 EBNF简介举例

《rust中的EBNF简介举例》:本文主要介绍rust中的EBNF简介举例,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 什么是 EBNF?2. 核心概念3. EBNF 语法符号详解4. 如何阅读 EBNF 规则5. 示例示例 1:简单的电子邮件地址

Flutter实现文字镂空效果的详细步骤

《Flutter实现文字镂空效果的详细步骤》:本文主要介绍如何使用Flutter实现文字镂空效果,包括创建基础应用结构、实现自定义绘制器、构建UI界面以及实现颜色选择按钮等步骤,并详细解析了混合模... 目录引言实现原理开始实现步骤1:创建基础应用结构步骤2:创建主屏幕步骤3:实现自定义绘制器步骤4:构建U

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

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

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

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