Swift之微信朋友圈图片浏览器
最近闲来无事,突然对微信, 微博, QQ等社交APP的九宫格的图片浏览功能非常感兴趣, 最近就尝试着研究了一下:
这里先附上Demo地址
- 在介绍项目之前, 先介绍三个基础知识
CATransition
转场动画ViewController
自定义转场UIBesization
贝塞尔曲线
一. CATransition转场动画
示例代码
//4. 转场动画
let transition = CATransition()
transition.type = transitionType
transition.subtype = isNext ? kCATransitionFromRight : kCATransitionFromLeft
transition.duration = 1
downloadImage(url: imageURL)
baseImage.layer.add(transition, forKey: "transition")
更多关于该动画的详细介绍, 可参考iOS出门必备之CoreAnimation(核心动画)中第七种CA动画, 故这里不多做介绍
二. ViewController
自定义转场
从iOS7开始,苹果更新了自定义ViewController转场的API,会用到的几个协议
protocol
:
- 描述ViewController转场的:
UIViewControllerTransitioningDelegate
UINavigationControllerDelegate
UITabBarControllerDelegate
- 定义动画内容的
UIViewControllerAnimatedTransitioning
UIViewControllerInteractiveTransitioning
- 表示动画上下文的
UIViewControllerContextTransitioning
1-1. 描述ViewController转场的
- 为什么苹果要引入这一套API?因为在iOS7之前,做转场动画很麻烦,要写一大堆代码在ViewController中。
- 引入这一套API之后,在丰富功能的同时极大程度地降低了代码耦合,实现方式就是将之前在ViewController里面的代码通过protocol分离了出来。
- 顺着这个思路往下想,实现自定义转场动画首先需要找到ViewController的delegate。
- 苹果告诉我们切换ViewController有三种形式:
UITabBarController
内部切换UINavigationController
切换present ViewController
- 这三种方式是不是需要不同的protocol呢?
1-2. 详解Protocol
UIViewControllerTransitioningDelegate
自定义模态转场动画时使用。- 设置
UIViewController
的属性transitioningDelegate
weak open var transitioningDelegate: UIViewControllerTransitioningDelegate?
- 设置
UINavigationControllerDelegate
自定义navigation转场动画时使用- 设置
UINavigationController
的属性delegate
weak open var delegate: UINavigationControllerDelegate?
- 设置
UITabBarControllerDelegate
自定义tab转场动画时使用- 设置
UITabBarController
的属性delegate
weak open var
- 设置