UIBezierPath画曲线控制点的选取
来源:互联网 发布:mp3剪切合并软件 编辑:程序博客网 时间:2024/05/14 23:35
如图,要画一条经过图中黄色点的平滑曲线,可以用UIBezierPath贝塞尔曲线来实现,UIBezierPath画曲线关键是控制点的选取。怎样实现图中曲线呢,给大家一个方法参考。
@implementation FingerPrintView- (instancetype)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { [self addFingerPrintLine]; } return self;}- (void)addFingerPrintLine { CGFloat centerX = CGRectGetWidth(self.frame)/2; CGFloat centerY = CGRectGetHeight(self.frame)/2; NSArray * xArray = [NSArray arrayWithObjects:@(0),@(centerX/2),@(centerX),@(1.5*centerX),@(1.8*centerX),@(centerX * 2), nil]; NSArray * yArray = [NSArray arrayWithObjects:@(centerY),@(centerY/2),@(centerY),@(1.5*centerY),@(0.5*centerY),@(centerY), nil]; for (int i = 0; i < xArray.count - 1; i ++) { NSInteger nextIndex = i + 1 ; // 标记下一个Index CGFloat value_i = [xArray[i] floatValue]; // 当前点的值 CGFloat value_next_i = [xArray[nextIndex] floatValue]; // 下一个点的值 CGFloat point_i_Y = [yArray[i] floatValue]; // 当前点的 Y CGFloat point_next_i_Y = [yArray[nextIndex] floatValue]; // 下一个点的 Y // 控制点的横坐标都是一样的:取两点横坐标的平均值,纵坐标不同:控制点1的纵坐标是当前点的纵坐标,控制点2的纵坐标是下一个点的纵坐标。 CGPoint controlPoint1 = CGPointMake((value_i + value_next_i)/ 2 , point_i_Y); CGPoint controlPoint2 = CGPointMake((value_i + value_next_i)/ 2, point_next_i_Y); CAShapeLayer *mouthLayer = [CAShapeLayer layer]; UIBezierPath *mouthPath = [UIBezierPath bezierPath]; [mouthPath moveToPoint:CGPointMake(value_i, point_i_Y)]; [mouthPath addCurveToPoint:CGPointMake(value_next_i , point_next_i_Y) controlPoint1:controlPoint1 controlPoint2:controlPoint2]; mouthLayer.path = mouthPath.CGPath; mouthLayer.lineWidth = 2; mouthLayer.fillColor = [UIColor clearColor].CGColor; mouthLayer.strokeColor = [UIColor redColor].CGColor; [self.layer addSublayer:mouthLayer]; UIView * view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, 10)]; view.center = CGPointMake(value_i, point_i_Y); view.layer.cornerRadius = 5; view.backgroundColor = [UIColor yellowColor]; [self addSubview:view]; } }
这样无论有多少个点,都可以用平滑的曲线连接起来了。
如果有其他更好的办法,欢迎交流。
阅读全文
0 0
- UIBezierPath画曲线控制点的选取
- N个控制点的贝塞尔曲线
- UIBezierPath贝塞尔曲线的常用方法总结
- iOS 简单的贝塞尔(UIBezierPath)曲线使用
- 贝塞尔曲线UIBezierPath画波纹进度条
- 控制DIV的选取
- 怎样才能知道所要画贝塞尔曲线的控制点坐标?
- 帮助写贝塞尔曲线控制点代码的神器
- UIBezierPath和CABasicAnimation画一条从左至右有动画的线,画曲线
- UIBezierPath贝塞尔曲线
- 贝塞尔曲线UIBezierPath 详解
- 贝塞尔曲线UIBezierPath
- UIBezierPath - 贝塞尔曲线
- iOS UIBezierPath--贝塞尔曲线
- UIBezierPath 贝尔曲线
- 贝塞尔曲线 UIBezierPath
- 贝塞尔曲线 UIBezierPath
- UIBezierPath 赛贝尔曲线
- 关于SecureCRT连接阿里云服务器提示需要public key的解决方案
- 关于github和sourcetree的ssh密钥配置教程
- iOS 计算UILable显示文字所需要的行数
- Tensorflow dynamic_rnn_decoder()
- Java 通过反射原理取得entity的值
- UIBezierPath画曲线控制点的选取
- c++中map排序
- oracle initialization or shutdown in progress解决方法
- centos7.3下二进制安装mysql5.7.19记录
- BZOJ1022: [SHOI2008]小约翰的游戏John
- Python基础小笔记《2017-10-18》
- java面试题-java虚拟机(JVM)
- c++ string和其他类型互转
- tomcat对https配置