iOS 动画Animation-4-3: CALayer子类:CAShapeLayer

首先说明:这是一系列文章,参考本专题下其他的文章有助于你对本文的理解。

好久没有更新博客,我也是上班一族,前一段时间工作量有点大,比较忙,也一直没有时间写博客。好在项目在上周末终于通过测试上线了,有可以休息一段时间了。

下面进入正题:今天介绍CAShapeLayer

API描述
Path这是一个比较重要的属性, 与UIBezier结合, 可以随心所欲的绘制出各种图形
FillColor填充颜色(看名字就懂)
FillRule填充规则
StrokeColor描边颜色
StrokeStart描边起始位置(0.0-1.0)
StrokeEnd描边结束位置(0.0-1.0)
LineCap线类型(下方有图)
LineJoin拐角类型(下方有图)
LineWidth线的宽度
MiterLimit斜接限制(Demo中有解释)

LineCap:
LineCap

LineJoin
LineJoin

如果看过我的博客都知道,我介绍的很多一部分东西都是从基础入手,这会让大家感觉效果上看起来很酷炫的东西实际上在实现起来并不困难。就比如说这个
先看Demo的效果图:

这里写图片描述

这个可并不是找了一个弧形的图给个动画让他在这转,这个Demo并没有用到任何图片素材

具体的实现原理是这样的:
首先上图的圆是用UIBezier画出来的,虽然不是一个完整的圆,但实际上就是一个圆,只是剩余部分没有配色。

let path = UIBezierPath(arcCenter: CGPoint(x: 150.0, y: 150.0), radius: 150, startAngle: 0, endAngle: CGFloat(M_PI * 2), clockwise: true)
  • 解释:
    第一个参数arcCenter猜就知道是圆心了,
    第二个参数猜:半径,
    第三个参数开始角度:坐标系x轴为0° ,
    第四个参数:结束角度,跟后面第五个参数还有关系,
    第五个参数:是否顺时针,true顺时针,flase逆时针

如果想更深入的了解UIBezier,不要急,后续我会写博客来帮助大家了解。

好了,一个圆画出来了,但是,也只是用代码画出来了,怎么让他显示呢?这是后就用到CAShapeLayer的path属性了
先初始化一个CAShapeLayer

 let shapeLayer = CAShapeLayer()
 shapeLayer.frame = someView.bounds
 shapeLayer.path = path.CGPath
  • 解释:
    这里的someView是我用storyboard创建的的一个View
    然后将path赋给shapLayer

写到这还是不显示,因为没有颜色,下面设置颜色

 shapeLayer.strokeColor = UIColor.greenColor().CGColor // 边缘线的颜色
 shapeLayer.fillColor = UIColor.clearColor().CGColor // 闭环填充的颜色
shapeLayer.lineCap = kCALineCapSquare // 边缘线的类型
/*
 kCALineCapButt  平角(切掉多出的)

kCALineCapRound 圆角

kCALineCapSquare 平角(补齐空缺)
*/

还有线宽

shapeLayer.lineWidth = 4.0//边缘线宽度(是从边缘位置向两边延伸)

设置shapeLayer的起始位置和终止位置

shapeLayer.strokeStart = 0.0//起始位置0--1
shapeLayer.strokeEnd = 0.75//结束为止0--1
someView.layer.addSublayer(shapeLayer)

终于出来了,但是还不会动,这是后就要加一个动画了,关于动画的讲解请看本专题之前的文章

//添加旋转动画
        let animation = CABasicAnimation(keyPath: "transform.rotation")
        animation.duration = 1
        animation.fromValue = 0
        animation.toValue = M_PI * 2
        animation.repeatCount = Float(Int.max)
        shapeLayer.addAnimation(animation, forKey: nil)

到此位置效果就出来了,是不是看起来很简单呢,其实他就是这么简单,不要以为有多么的高大上,或者复杂。
Demo位置
下面还有一个Demo会讲到另外两个本文没有讲到的属性不常用,效果是这样的,做跑马灯倒是挺好玩的,实际上是连贯的,gif效果不好,自己下载Demo玩吧
这里写图片描述

练习Demo
Demo2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值