Swift.轮转动画+Pop框架

效果图

前言:

项目改自Swift.轮转动画,100行代码搞定,页面布局没有变化,只是改变了动画效果,以及动画实现方式.所以有关布局的问题可以参考那篇文章.

实现效果:

长按中心View,使周围子View旋转,并将最下方的View放大,获取其image在中心View展示,当停止长按时动画停止.

实现思路:

所有的控件全部加到一个大的背景view上,本质上旋转的是这个背景view,在旋转背景view的同时,让它所有的子控件反向旋转,就实现了现在这种效果.

使用pop框架添加旋转动画.给中心button一个.touchDown手势事件添加动画,再添加一个[.touchUpInside, .touchDragExit]手势事件来移除动画.

最下方的view变大是通过CADisplayLink监听子view.layer.presention().bounds,来获取子View在当前页面的实际frame.x,当它处于一个范围,并且frame.y小于中心view.frame.y的时候.修改它的transform,来使其变大,并且修改它的tag来标记它已经属于变大状态,当它frame.x超出了预定范围,使其还原.

遇到问题:

#####1.动画实现方式选择问题:
之前有尝试使用transform,CABasicAnimation,UIView.animation三种动画方式:都遇到了各种各样的问题:

  • 使用transform时很难实现长按按钮动画一直运行这个效果.
  • 使用CABasicAnimation时只修改view.layer.frame并不修改view.frame,所以会出现动画暂停时view闪回或者view展示位置与功能位置不符的问题.
  • 使用UIView.animation时很难流畅的控制它的暂停与开始.
    都无法完美实现,所以使用了faceBook提供的pop框架.pop框架在使用上与CABasicAnimation很像,建议可以尝试使用.
    #####2.使用pop动画,无法获取子view的即时frame问题:
    想使用KVO监听,但无法实现.
    选择使用CADisplayLink监听view.layer.presentation().layer.再通过
let rect = subView.convert(bounds, to: UIApplication.shared.keyWindow)

来获取子View在当前页面中的即时Frame.

实现方式:

1.添加背景透明view,中心圆圈view.

2.添加周围旋转子view.

3.添加旋转方法.

4.修改最下方View的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值