使用CAShapeLayer与UIBezierPath画出想要的图形
来源:互联网 发布:手机淘宝的淘抢购在哪 编辑:程序博客网 时间:2024/04/28 08:01
CAShapeLayer 与UIBezierPath
使用CAShapeLayer与UIBezierPath可以实现不在view的drawRect方法中就画出一些想要的图形
1. 它依附于一个给定的path,必须给与path,而且,即使path不完整也会自动首尾相接
2. strokeStart以及strokeEnd代表着在这个path中所占用的百分比
3. CAShapeLayer动画仅仅限于沿着边缘的动画效果,它实现不了填充效果
步骤:
1、新建UIBezierPath对象bezierPath
2、新建CAShapeLayer对象caShapeLayer
3、将bezierPath的CGPath赋值给caShapeLayer的path,即caShapeLayer.path = bezierPath.CGPath
4、把caShapeLayer添加到某个显示该图形的layer中
以下给出如何使用CAShapeLayer
// 创建一个view UIView *showView = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)]; [self.view addSubview:showView]; showView.backgroundColor = [UIColor redColor]; showView.alpha = 0.5;
// 贝塞尔曲线(创建一个圆)
UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(100 / 2.f, 100 / 2.f) radius:100 / 2.f startAngle:0 endAngle:M_PI * 2 clockwise:YES];</span>
// 创建一个shapeLayer
CAShapeLayer *layer = [CAShapeLayer layer]; layer.frame = showView.bounds; // 与showView的frame一致 layer.strokeColor = [UIColor greenColor].CGColor; // 边缘线的颜色 layer.fillColor = [UIColor clearColor].CGColor; // 闭环填充的颜色 layer.lineCap = kCALineCapSquare; // 边缘线的类型 layer.path = path.CGPath; // 从贝塞尔曲线获取到形状 layer.lineWidth = 4.0f; // 线条宽度 layer.strokeStart = 0.0f; layer.strokeEnd = 0.1f;
// 将layer添加进图层
[showView.layer addSublayer:layer];
// 3s后执行动画操作(直接赋值就能产生动画效果) [[GCDQueue mainQueue] execute:^{ layer.speed = 0.1; layer.strokeStart = 0.5; layer.strokeEnd = 0.9f; layer.lineWidth = 1.0f; } afterDelay:NSEC_PER_SEC * 3];
// 给这个layer添加动画效果 CABasicAnimation *pathAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"]; pathAnimation.duration = 1.0; pathAnimation.fromValue = [NSNumber numberWithFloat:0.5f]; pathAnimation.toValue = [NSNumber numberWithFloat:0.8f]; [layer addAnimation:pathAnimation forKey:nil];
// 创建一个gradientLayer 颜色渐变 CAGradientLayer *gradientLayer = [CAGradientLayer layer]; gradientLayer.frame = showView.bounds; [gradientLayer setColors:[NSArray arrayWithObjects: (id)[[UIColor redColor] CGColor], (id)[[UIColor yellowColor] CGColor], nil]]; [gradientLayer setLocations:@[@0.5,@0.9,@1]]; [gradientLayer setStartPoint:CGPointMake(0.5, 1)]; [gradientLayer setEndPoint:CGPointMake(0.5, 0)];
0 0
- 使用CAShapeLayer与UIBezierPath画出想要的图形
- 使用CAShapeLayer与UIBezierPath画出想要的图形
- 使用CAShapeLayer与UIBezierPath画出想要的图形
- 使用CAShapeLayer与UIBezierPath画出想要的图形
- 使用CAShapeLayer与UIBezierPath画出想要的图形 -- 下载进度条
- 使用CAShapeLayer与UIBezierPath画出想要的图形
- 使用CAShapeLayer与UIBezierPath画出想要的图形
- 使用CAShapeLayer与UIBezierPath画出想要的图形
- 使用CAShapeLayer与UIBezierPath画出想要的图形
- 使用CAShapeLayer与UIBezierPath画出想要的图形
- 使用CAShapeLayer与UIBezierPath画出想要的图形
- 使用CAShapeLayer与UIBezierPath画出想要的图形
- 使用CAShapeLayer与UIBezierPath画出想要的图形
- 使用CAShapeLayer与UIBezierPath画出想要的图形
- 使用CAShapeLayer与UIBezierPath画出想要的图形
- IOS Core Animation Advanced Techniques-使用CAShapeLayer与UIBezierPath画出想要的图形
- 使用CAShapeLayer与UIBezierPath画出想要的圆弧形进度条
- 使用CAShapeLayer的path属性与UIBezierPath画出扫描框
- Struts2教程9:实现自已的拦截器
- windows
- mysql的ROOT权限修改
- js屏蔽事件
- sprngMVC和json实现前台和后台数据交换
- 使用CAShapeLayer与UIBezierPath画出想要的图形
- 100-same tree-树相关
- Real-Time Linux, Multicore ARM and Fast Context Switch a couple of year later: performance analysis
- javascript学习一: 基础语法
- Beginners Level Course:Introduction to Linux
- 让世界知道只在乎你!
- myEclipse复制项目时的一些问题
- 黑马程序员----[20150507][集合框架3]
- 点击按钮复制粘贴到文本框