iOS-汉字顺序展示

IOS数组按中文关键字以字母序排序 IOS项目中会用到对通讯录的联系人或是会员按姓名为关键字排序,因为NSArray并不直接支持对汉字的排序,这就要通过将汉字转换成拼音完成按A~Z的排序,这看起来是个头疼的问题,因为牵扯到汉字转为拼音,kmyhy给出一个较易实现的方法,获取汉字的首字的首字母,如将“王”变成“W”,完整文章(传送门)。     其中他通过pinyinFirstLetter函数获取中文拼音,函数原理是:“pinyin 阅读详情

前言:

主要用到以下内容: 
1.CABasicAnimation -- animationWithKeyPath:@"strokeEnd"//开始绘制
2.CAKeyframeAnimation -- animationWithKeyPath:@"position"//以position作为关键帧动画
3.CAShapeLayer//CAShapeLayer需要与贝塞尔曲线配合使用才有意义、可作为进度条
4.CALayer//展示view的layer

Demo地址


效果展示:

这里写图片描述

获取字体路径:

    UIBezierPath *path = [self getStringLayer:@"I'm Quinn-魁"];

 
  • 1
  • 2

通过字体路径创建CAShapeLayer:

    [path addLineToPoint:CGPointMake(0, 50)];


    CAShapeLayer *pathLayer = [CAShapeLayer layer];
    pathLayer.frame = self.view.layer.bounds;
    pathLayer.bounds = CGPathGetBoundingBox(path.CGPath);
    pathLayer.backgroundColor = [[UIColor yellowColor] CGColor];
    pathLayer.geometryFlipped = YES;
    pathLayer.path = path.CGPath;
    pathLayer.strokeColor = [UIColor colorWithRed:234.0/255 green:84.0/255 blue:87.0/255 alpha:1].CGColor;
    pathLayer.fillColor = [UIColor whiteColor].CGColor;
    pathLayer.lineWidth = 1.0f;
    pathLayer.lineJoin = kCALineJoinMiter;

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

添加到显示的view的layer上:

[self.view.layer addSublayer:pathLayer];
 
  • 1

再来一个图片的layer(用作关键帧动画图片):

    UIImage *penImage = [UIImage imageNamed:@"Quinn.png"];
    CALayer *penLayer = [CALayer layer];
    penLayer.contents = (id)penImage.CGImage;
    penLayer.anchorPoint = CGPointZero;
    penLayer.frame = CGRectMake(0.0f, 50.0f, penImage.size.width, penImage.size.height);
    [pathLayer addSublayer:penLayer];
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

添加到显示的view的layer上:

[self.view.layer addSublayer:penLayer];

 
  • 1
  • 2

当我们得到路径时,这时候还没有任何效果,只是在屏幕上绘制了一张图片和几个文字,我们需要让他动起来:

设置绘制动画

duration表示动画时间
fromValue起始状态(0-1)
toValue结束状态(0-1)
addAnimation添加路径动画
speed 速度
timeOffset 时间
速度和时间这两个属性与duration和fromValue、toValue有关
    CABasicAnimation *pathAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
    pathAnimation.duration = 10.0;
    pathAnimation.fromValue = [NSNumber numberWithFloat:0.0f];
    pathAnimation.toValue = [NSNumber numberWithFloat:1.0f];
    [self.pathLayer addAnimation:pathAnimation forKey:@"strokeStart"];
    pathAnimation.speed = 0.1;
    pathAnimation.timeOffset = 0;
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

当将 strokeEnd 更改为 strokeStart

//此时动画展现方式为擦除动画,大家可以一试究竟
 
  • 1

这里写图片描述

让图片跟随路径动画一起动起来:

calculationMode:可以理解为动画的频率、效果
kCAAnimationLinear(线性)
kCAAnimationPaced(均匀)
kCAAnimationCubic(圆滑)
kCAAnimationCubicPaced(均匀圆滑)

delegate :
//- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;
    CAKeyframeAnimation *penAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
    penAnimation.duration = 10.0;
    penAnimation.path = self.pathLayer.path;
    penAnimation.calculationMode = kCAAnimationPaced;
    penAnimation.delegate = self;
    [self.penLayer addAnimation:penAnimation forKey:@"position"];
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

获取路径的方法:getStringLayer 方法如下:

- (UIBezierPath *)getStringLayer:(NSString *)str{
    //创建可变path  
    CGMutablePathRef letters = CGPathCreateMutable();

//    HelveticaNeue-UltraLight
//设置字体
    CTFontRef font = CTFontCreateWithName(CFSTR("Helvetica-Bold"), 32.0f, NULL);
    NSDictionary *attrs = [NSDictionary dictionaryWithObjectsAndKeys:
                           (__bridge id)font, kCTFontAttributeName,
                           nil];
    NSAttributedString *attrString = [[NSAttributedString alloc] initWithString:str
                                                                     attributes:attrs];
    //根据字符串创建 line                                                                
    CTLineRef line = CTLineCreateWithAttributedString((CFAttributedStringRef)attrString);
    //获取每一个字符作为数组
    CFArrayRef runArray = CTLineGetGlyphRuns(line);

    // 遍历字符数组
    for (CFIndex runIndex = 0; runIndex < CFArrayGetCount(runArray); runIndex++)
    {
        // Get FONT for this run
        CTRunRef run = (CTRunRef)CFArrayGetValueAtIndex(runArray, runIndex);
        CTFontRef runFont = CFDictionaryGetValue(CTRunGetAttributes(run), kCTFontAttributeName);

        // for each GLYPH in run
        for (CFIndex runGlyphIndex = 0; runGlyphIndex < CTRunGetGlyphCount(run); runGlyphIndex++)
        {
            // get Glyph & Glyph-data
            CFRange thisGlyphRange = CFRangeMake(runGlyphIndex, 1);
            CGGlyph glyph;
            CGPoint position;
            CTRunGetGlyphs(run, thisGlyphRange, &glyph);
            CTRunGetPositions(run, thisGlyphRange, &position);

            // Get PATH of outline
            {
                CGPathRef letter = CTFontCreatePathForGlyph(runFont, glyph, NULL);
                CGAffineTransform t = CGAffineTransformMakeTranslation(position.x, position.y);
                CGPathAddPath(letters, &t, letter);
                CGPathRelease(letter);
            }
        }
    }
    CFRelease(line);
    UIBezierPath *path = [UIBezierPath bezierPath];
    [path moveToPoint:CGPointZero];
    [path appendPath:[UIBezierPath bezierPathWithCGPath:letters]];
    CGPathRelease(letters);
    CFRelease(font);
    return path;
}

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52

原文:http://blog.youkuaiyun.com/Xoxo_x/article/details/71512943 
参考博客:http://blog.youkuaiyun.com/mydo/article/details/51620720

在Android上实现汉字笔顺动画效果——HanZiWriter 是 javascript 免费开源库,根据汉字书写时按照笔画顺序的特征,可以播放正确笔画顺序的描边动画和练习测试。可以让全球用户能够通过手绘模仿的方式来学习和练习书写汉字。实例需要传入目标 div(ID 或 DOM 引用)、要呈现的字符以及配置选项。下面是一个简单的示例。3.除了动画和测验的核心功能外,还有其他几种方法可用于控制角色的渲染。写一个html的引用地址,在定义几个和我们安卓交互的方法。在Android中使用,我使用的是加载WebView。包含其他配置选项的对象。序,万般皆是命,半点不由人。 阅读详情

相关推荐

iOS汉字拼音排序与带索引TableView实现

在TableView中实现字母索引的渲染方式,需要在的方法中进行配置。对于iOS开发,我们可以使用的分区头视图来显示索引。// 创建字母索引视图// 将字母标签添加到视图中// 其他布局代码...为了更好地展示数据,我们通常会对TableView的单元格进行自定义渲染。这通常涉及使用自定义的类,在其中我们可以定义需要显示的数据内容和布局。// 配置cell数据// 可能还有其他数据的配置...以上是一个简化的例子,展示如何配置自定义的单元格。

weixin_35706255的博客 848

ios:文字显示动画

记:闲暇之余自己写的ios文字显示动画文件。 文字将从左到右从上到下逐个显示,显示的速度可自己控制: .h头文件代码: #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> NS_ASSUME_NONNULL_BEGIN @interface SWStringAnimation : NSObject @prope...

u014397110的博客 1263

iOS 文字动画(每个字逐个显示)

基于两种思维方式的文字动画: 1.将每个字按照给定的时间逐个绘制; 2.在label上添加一个挡板

iOS CoreAnimation之CABasicAnimation:文字路径动画

前言:主要用到以下内容: 1.CABasicAnimation -- animationWithKeyPath:@"strokeEnd"//开始绘制 2.CAKeyframeAnimation -- animationWithKeyPath:@"position"//以position作为关键帧动画 3.CAShapeLayer//CAShapeLayer需要与贝塞尔曲线配合使用才有意义、可作为进

Quinn's blog ! I'm glad to be here! 4120

linux下使用Ollama本地部署LLM

Ollama 是一个用于在本地运行大语言模型(如 Llama 2、Mistral、Gemma、Qwen 等)的工具,支持模型的拉取、运行、管理等功能。当你运行ollama。

u013218342的博客 1660

[LaTeX] 调整参考文献的格式(References),包括作者名缩写,行距,字体,引用顺序等等

在此记录我对LaTeX中参考文献references的尝试,主要涵盖如题几个方面。

the Blog of 等不到天亮丶等时光 4万+

iOS 文字动画,文字逐个显示

随手记:     对于iOS文字动画,首先想到的应该是基于CoreText框架将文字每个都写出来,加上定时器给定每个字显示的时间,这是一种思维方式: #import "ViewController.h" #import @interface ViewController () { NSMutableArray *labels; NSMutableArray *numArr;

分享的才是最美的 9857

生信实战:用bcftools玩转VCF文件处理(从压缩到注释全流程)

本文详细介绍了使用bcftools处理VCF文件的全流程实战指南。从数据准备、压缩索引、信息提取、质量统计到核心的变异过滤与功能注释,手把手教你高效管理基因组变异数据。重点阐述了如何利用bcftools进行VCF文件注释,整合外部数据库信息,为变异位点添加关键的生物学标签,是生物信息学数据分析的必备技能。

rgv23456789的博客 342

iOS-汉字排序

* 在IOS开发过程中,排序是我们经常遇到的问题,那么如何进行排序呢? * 在英文状态下,系统中有直接可以调用的方法。 例如:对数组[sss, aaa, bbb, ppp]进行排序,我们可以直接使用系统方法。 NSMutableArray * array = [[NSMutableArray alloc]initWithObjects:@"sss",@"aa...

dasongbo7290的博客 4788

通义千问语言模型Qwen2.5架构详解

此外,将基于API的模型 Qwen-Plus 与领先的专有和开源模型进行了对比,包括 GPT4-o、Claude-3.5-Sonnet、Llama-3.1-405B和DeepSeek-V2.5。Qwen2.5-Math-72B-Instruct的整体性能超越了Qwen2-Math-72B-Instruct和GPT4-o,甚至是非常小的专业模型如 Qwen2.5-Math-1.5B-Instruct也能在与大型语言模型的竞争中取得高度竞争力的表现。近来也出现了明显的转向小型语言模型(SLMs)的趋势。

搏博的专栏 1万+

用python画年度和月度的日历图

用python画各种日历图,可以区分月份来画也可以画一整年的,日历图中可以体现自己的信息

weixin_44853840的博客 2138

汉字书写笔画动画展示方案

本文深入探讨汉字书写笔画动画的实现方案,涵盖Unicode编码、标准笔顺数据、SVG与Canvas渲染对比、字体轮廓提取及系统架构设计,结合教育场景需求,提出模块化、跨平台的技术路径,并分享常见问题解决方案与实际应用方向。

weixin_42393362的博客 1250

别再写XPath改DOM了!用OpenClaw零代码搞定爬虫全流程(抓取+清洗+存储)

免费版的大模型调用次数有限制(每天100次),但企业版是无限的,还能私有化部署;大模型分析DOM结构有时候会慢1-2秒,但比起节省的时间,完全可以接受;自定义Skill的文档还不够完善,但社区很活跃,有问题在Discord里问,很快就能得到回复。但总的来说,OpenClaw真的改变了我写爬虫的方式——以前我是“代码的奴隶”,现在我是“需求的提出者”,把时间花在更有价值的业务逻辑上,而不是重复繁琐的DOM调试上。如果你也在被传统爬虫折磨,强烈建议你试试OpenClaw,相信我,用了就回不去了。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1314

按照笔画顺序写汉字

原文链接: 按照笔画顺序写汉字 上一篇: ...

阿豪 314

使用蒙特卡洛模拟方法在MATLAB中估算居里温度: 一个详细而通俗的指南

居里温度是磁性材料失去磁性的温度。但是,计算机模拟为我们提供了一个在理论和实验之间的桥梁,使我们能够在不进行实际测量的情况下估计这一重要参数。在下一部分,我们将详细介绍蒙特卡洛迭代的核心代码,以及如何使用它来模拟磁性材料中原子的行为。在估算居里温度的上下文中,我们将使用蒙特卡洛方法来模拟磁性材料中的原子或分子的行为。通过使用蒙特卡洛方法,我们可以在MATLAB中估算居里温度,从而为理论研究和实验设计提供有价值的信息。:我们使用的是一个有限的尺寸的网格模型,这可能导致一些大小效应,特别是在接近居里温度时。

qq_38334677的博客 978

【AHE数据集】中国2019年多源热排放数据集-500m空间分辨率

【AHE数据集】中国2019年多源热排放数据集

WW、forever的博客 412

MakeMeAHanzi完整指南:如何免费获取9000+汉字数据资源

MakeMeAHanzi是一个免费开源的汉字数据项目,为开发者和教育工作者提供了超过9000个常用简体及繁体汉字的完整数据集,包括详细的笔画顺序向量图形和字典信息。这个项目让汉字学习变得前所未有的简单和直观,任何人都可以免费使用这些高质量的数据资源。 [![汉字分解演示](https://raw.gitcode.com/gh_mirrors/ma/makemeahanzi/raw/618dbab

gitblog_00236的博客 1328

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Flutter 框架跨平台鸿蒙开发 - 汉字笔画数查询:打造智能汉字学习助手

汉字笔画数查询应用成功实现了完整的汉字学习功能,通过直观的界面设计和丰富的交互体验,为用户提供了专业的汉字学习工具。

2501_90213649的博客 1031

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【亲测免费】 MakeMeAHanzi:免费开源的汉字数据宝典

--- ## 项目介绍 MakeMeAHanzi 是一个强大的开源项目,致力于提供超过 9000 个常用简体及繁体汉字的数据集,包括详细的笔画顺序向量图形。该项目通过其演示站点,允许用户通过绘制来查找汉字,并提供了数据下载,以便在个人网站或应用程序中加以利用。项目基于来自 Unihan 和 CJKlib 的字典数据以及两个免费字体——Arphic PL KaitiM GB 和 Arphic P...

gitblog_00229的博客 1506

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【iOS】汉字数组,按首字母排序

今天在排序城市的时候,遇到了这个问题,查找结果  IOS项目中会用到对通讯录的联系人或是会员按姓名为关键字排序,因为NSArray并不直接支持对汉字的排序,这就要通过将汉字转换成拼音完成按A~Z的排序,这看起来是个头疼的问题,因为牵扯到汉字转为拼音,kmyhy给出一个较易实现的方法,获取汉字的首字的首字母,如将“王”变成“W”,完整文章(传送门)。     其中他通过pinyinF

HeavenMei的博客 3472

汉字编码之GBK编码(附完整码表)

继续字符编码的学习。今天介绍一下GBK(汉字内码扩展规范),GB 2312 GB18030。引用网友的话可以概括一下: GBK和UTF8的区别:GBK就是在保存你的帖子的时候,一个汉字占用两个字节。。外国人看会出现乱码,此为我中华为自己汉字编码而形成之解决方案。 UTF8就是在保存你的帖子的时候,一个汉字占用3个字节。。但是外国人看的话不会乱码,此为西人为了解决多字节字符而形成之解决方案。 GBK编码是GB2312编码的超集,向下完全兼容GB2312。 GB18030编码向下兼容GBK和GB2312, GB

郭晓东的专栏 83万+

如何快速掌握汉字书写:MakeMeAHanzi 免费开源项目完整指南

MakeMeAHanzi 是一个强大的免费开源汉字数据库项目,提供了超过9000个常用简体及繁体汉字的完整数据资源。该项目包含了详细的笔画顺序矢量图形、字典定义和字形分解信息,是学习中文汉字书写的终极工具。无论你是中文学习者、教育工作者还是开发者,都能从中获得宝贵的汉字学习资源。 ## 🎯 项目核心价值与特色功能 MakeMeAHanzi 项目最大的优势在于其全面的汉字数据覆盖和易于使用的格

gitblog_00982的博客 315

IOS 自带输入法接收汉字触发事件

今天做了一个录入信息的,客户通过扫码跳转到信息录取界面,支持微信、浏览器扫码方式,录取有几个下拉框,下拉框支持模糊查询;安卓端模糊查询是正常的,但是ios端有一个现象,ios用自带的输入法时,输入汉字时,汉字还未出现,就会立即把汉字字母触发查询,其实这样也能接受,关键是选中汉字时事件就不触发了,这个就可悲了,通过网上搜索解决方法,现在给出解决方案: 代码:       //用于标记是否是输...

每天进步一点 2742
上一篇: iOS -XX天xx时xx分xx秒部分改变颜色和字体大小
下一篇: 这周就分享一个链接吧,面试100道题
董其林
博客等级 码龄11年 1粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值