Swift3.0 自定义刷新控件(2) -仿美团的刷新控件

在跟随自定义刷新控件(1)之后,做一个自定义类似美团的刷新控件,效果图如下:

MTRefresh.gif

首先,自定义一个YWMTRefreshView类 继承YWRefreshView,通过xib把相对应的控件添加到视图,通过序列帧动画完成建筑物、和袋鼠的动画效果
//1.房子 let bImg1 = #imageLiteral(resourceName: "icon_building_loading_1") let bImg2 = #imageLiteral(resourceName: "icon_building_loading_2") buildIV.image = UIImage.animatedImage(with: [bImg1,bImg2], duration: 0.5)
而地球的旋转动画,因为transform无法完成旋转一周的效果,这里使用核心动画的方式:
//2.地球 //创建旋转动画 CABasicAnimation提供了对单一动画的实现 let anim = CABasicAnimation(keyPath: "transform.rotation") //2 * M_PI 旋转一周,- 代表逆时针,默认为顺时针 anim.toValue = -2 * M_PI //不限循环次数 anim.repeatCount = MAXFLOAT //旋转一周的时间 anim.duration = 3 //是否动画完成后,动画效果从设置的layer上移除 anim.isRemovedOnCompletion = false //添加动画 earthIV.layer.add(anim, forKey: nil)
袋鼠向下拉会由小变大,超过临界点保持不变的效果,首先要设置锚点:
锚点决定着CALayer身上的哪个点会在position属性所指的位置
以自己的左上角为原点(0, 0)
它的x、y取值范围都是0~1,默认值为(0.5, 0.5)
kangarooIV.transform = CGAffineTransform(scaleX: 0.2, y: 0.2) //设置锚点 kangarooIV.layer.anchorPoint = CGPoint(x: 0.5, y: 1) //设置center kangarooIV.center = CGPoint(x: self.bounds.width * 0.5, y: self.bounds.height - 25)
由父视图的高度,通过didSet方法实时改变kangarooIV.transform的scale的值,来改变大小。
Demo地址:https://github.com/iosyaowei/refreshDemo/tree/MTRefresh

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥ios动画全貌。在这里你可以看...
    每天刷两次牙阅读 8,573评论 6 30
  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌。在这里你可以看...
    F麦子阅读 5,147评论 5 13
  • Core Animation Core Animation,中文翻译为核心动画,它是一组非常强大的动画处理API,...
    45b645c5912e阅读 3,071评论 0 21
  • 在iOS实际开发中常用的动画无非是以下四种:UIView动画,核心动画,帧动画,自定义转场动画。 1.UIView...
    请叫我周小帅阅读 3,169评论 1 23
  • "小画板程序"完成"小画板"程序。 下载地址:http://git.oschina.net/changyou/my...
    _浅墨_阅读 702评论 0 5