将UIBezierPath存为自己定义格式的字符串,再将字符串转为UIBezierPath
<pre name="code" class="objc">自己定义字符串格式为:@"123.02,234.23|321.23,432.0002|543.0003,432.0045|654.0034,567.0034|23.3443,56.0034|77.3440,55.3443|"
/**
*@brief:将BezierPath中的点转为字符串
*/
+ (NSString*)convertBezierPathToNSString:(UIBezierPath*) bezierPath;
{ NSString *pathString = @""; CGPathRef yourCGPath = bezierPath.CGPath;
NSMutableArray *bezierPoints = [NSMutableArray array];
CGPathApply(yourCGPath, (__bridge void *)(bezierPoints), MyCGPathApplierFunc); for (int i = 0; i < [bezierPoints count]; ++i)
{ CGPoint point = [bezierPoints[i] CGPointValue];
pathString = [pathString stringByAppendingString:[NSString stringWithFormat:@"%f",point.x]];
pathString = [pathString stringByAppendingFormat:@"%@",@","];
pathString = [pathString stringByAppendingString:[NSString stringWithFormat:@"%f",point.y]];
pathString = [pathString stringByAppendingString:@"|"]; } return pathString;
} void MyCGPathApplierFunc (void *info, const CGPathElement *element) {
NSMutableArray *bezierPoints = (__bridge NSMutableArray *)info; CGPoint *points = element->points;
CGPathElementType type = element->type; switch(type) {
case kCGPathElementMoveToPoint: // contains 1 point
[bezierPoints addObject:[NSValue valueWithCGPoint:points[0]]];
break; case kCGPathElementAddLineToPoint: // contains 1 point
[bezierPoints addObject:[NSValue valueWithCGPoint:points[0]]];
break; case kCGPathElementAddQuadCurveToPoint: // contains 2 points
[bezierPoints addObject:[NSValue valueWithCGPoint:points[0]]];
[bezierPoints addObject:[NSValue valueWithCGPoint:points[1]]];
break; case kCGPathElementAddCurveToPoint: // contains 3 points
[bezierPoints addObject:[NSValue valueWithCGPoint:points[0]]];
[bezierPoints addObject:[NSValue valueWithCGPoint:points[1]]];
[bezierPoints addObject:[NSValue valueWithCGPoint:points[2]]];
break; case kCGPathElementCloseSubpath: // contains no point
break;
}
} <pre name="code" class="objc">
/**
*@brief:将字符串中的点转为BezierPath
*/
+ (UIBezierPath*)convertNSStringToBezierPath:(NSString*) bezierPathString
{ NSMutableArray *pointsArray = [[NSMutableArray alloc] init];
NSInteger length = 0; //解析字符串
NSString *separatorString1 = @",";
NSString *separatorString2 = @"|"; NSScanner *aScanner = [NSScanner scannerWithString:bezierPathString]; while (![aScanner isAtEnd]) { NSString *xString, *yString; [aScanner scanUpToString:separatorString1 intoString:&xString];
[aScanner setScanLocation:[aScanner scanLocation]+1]; [aScanner scanUpToString:separatorString2 intoString:&yString];
[aScanner setScanLocation:[aScanner scanLocation]+1]; CGPoint point;
point.x = [xString floatValue];
point.y = [yString floatValue]; [pointsArray addObject:[NSValue valueWithCGPoint:point]]; } //首先将字符串解析为CGPoint数组,再将数组初始化UIBeizerPath
length = [pointsArray count];
UIBezierPath *bezierPath = [[UIBezierPath alloc] init];
[bezierPath moveToPoint:[pointsArray[0] CGPointValue] ];
for (NSUInteger j=1; j< length; j++) {
[bezierPath addLineToPoint:[pointsArray[j] CGPointValue] ];
} return bezierPath;
}
将UIBezierPath存为自己定义格式的字符串,再将字符串转为UIBezierPath的更多相关文章
- python第三十课--异常(异常处理定义格式和常见类型)
演示: 1).异常处理的定义格式: 2).常见的运行时异常类型: try: print(10/0) num=int('132a') except Exception as e: print('出错了. ...
- build.sbt的定义格式
一个简单的build.sbt文件内容如下: name := "hello" // 项目名称 organization := "xxx.xxx.xxx" // 组 ...
- SQL server 存储过程 C#调用Windows CMD命令并返回输出结果 Mysql删除重复数据保留最小的id C# 取字符串中间文本 取字符串左边 取字符串右边 C# JSON格式数据高级用法
create proc insertLog@Title nvarchar(50),@Contents nvarchar(max),@UserId int,@CreateTime datetimeasi ...
- Python:Base1(数据类型,print语句,变量,定义字符串,raw字符串与多行字符串,Unicode字符串,整数和浮点数运算,布尔类型运算)
1.Python中数据类型: 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据 ...
- 信1705-2 软工作业最大重复词查询思路: (1)将文章(一个字符串存储)按空格进行拆分(split)后,存储到一个字符串(单词)数组中。 (2)定义一个Map,key是字符串类型,保存单词;value是数字类型,保存该单词出现的次数。 (3)遍历(1)中得到的字符串数组,对于每一个单词,考察Map的key中是否出现过该单词,如果没出现过,map中增加一个元素,key为该单词,value为1(
通过学习学会了文本的访问,了解一点哈希表用途.经过网上查找做成了下面查询文章重复词的JAVA程序. 1 思 思路: (1)将文章(一个字符串存储)按空格进行拆分(split)后,存储到一个字符串(单词 ...
- java保存json格式数据,保存字符串和读取字符串
1.java保存json格式数据,保存字符串和读取字符串 import java.io.*; class RWJson { public void wiite(String s, String toS ...
- Oracle基础 各种语句的定义格式
Oracle内建数据类型 一. 字符数据 1. char(size) 2. varchar2(size) 最常用,最大长度4000字节 3. nvhar(size).nvarchar(size) 4. ...
- mysql中存不进去json_encode格式的数据
主要是因为json_encode格式的数据,中间带有\,在存入数据库的时候,会把反斜杠删除了. 所以,想要存进去的话,需要在外层调用一下函数addslashes();这个函数会在每个反斜杠的前面添加反 ...
- 测试Protobuffer的定义格式对其时间和空间的影响
测试Protobuffer格式的A命令转换为std::string的的字节个数,分别测试了工程中用到的几种命令: a)AddLayer:108 b)AddSource:209 c)MoveLayer: ...
随机推荐
- linux工作笔记
1. Linux基础 1.1. Unix 1965年,AT&T贝尔电话实验室.通用电气公司.麻省理工学院MAC课题组一起联合开发一个称为Multics的新操作系统.该项目目的是让大型主机可以同 ...
- 用jQuery实现搜索框的过滤效果
遇到的问题: 1.动态添加了某些元素,在动态添加的某个元素上绑定事件失效 原因:因为需要绑定的元素的直接父元素也是动态添加的解决:向上为上一级父元素绑定事件 $(".check-box&qu ...
- bzoj 4566 [Haoi2016]找相同字符SA
4566: [Haoi2016]找相同字符 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 128 Solved: 75[Submit][Status ...
- spring-boot项目MapperScan注解包含多个包
单个包 @MapperScan("com.mysiteforme.admin.dao") 多个包 @MapperScan({"com.mysiteforme.admin. ...
- 【CF1017A】The Rank(签到)
题意:给定n个人的4门课成绩,排名按总分,保证总分互不相同,求1号名次 n<=1e3,a[i],b[i],c[i],d[i]<=1e2 思路: #include<cstdio> ...
- gzip: stdin: unexpected end of file tar: 归档文件中异常的 EOF
gzip: stdin: unexpected end of file tar: 归档文件中异常的 EOF 问题描述: 使用tar命令解压文件时,报错: gzip: stdin: unexpected ...
- 数据结构自己实现——Linklist
//单???链???表??? #include <iostream> using namespace std; typedef char datatype; typedef struct ...
- 洛谷——P3252 [JLOI2012]树
P3252 [JLOI2012]树 题目描述 在这个问题中,给定一个值S和一棵树.在树的每个节点有一个正整数,问有多少条路径的节点总和达到S.路径中节点的深度必须是升序的.假设节点1是根节点,根的深度 ...
- BZOJ 1008: [HNOI2008]越狱 组合数学
原题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1008 题解: 就很傻逼的组合数学啊... $$ans=M^N-M*(M-1)^{(N-1) ...
- javaScript 时间转换,将后台返回的时间为一串数字转成正常格式
js完整代码: function transferTime(cTime){ var jsonDate = new Date(parseInt(cTime)); Date.prototype.forma ...