WWMotionGraphicTransition


dependencies: [
.package(url: "https://github.com/William-Weng/WWMotionGraphicTransition.git", .upToNextMajor(from: "1.2.2"))
]
函数 |
说明 |
build() |
创建实例 |
start(count:colors:duration:direction:) |
动画开始 |
end(duration:direction:) |
动画结束 |
效果 |
说明 |
DoorCurtain |
像单片门帘开关的过场动画 |
FanBlade |
像电风扇叶片旋转的过场动画 |
Louver |
像百叶窗开合的过场动画 |
import UIKit
import WWMotionGraphicTransition
final class ViewController: UIViewController {
@IBOutlet weak var faceImageView: UIImageView!
private let duration: TimeInterval = 0.5
private let colors: [UIColor] = [.red, .yellow, .blue, .green, .orange]
private var count: Int { colors.count }
private var doorCurtain: WWMotionGraphicTransition.DoorCurtain!
private var fanBlade: WWMotionGraphicTransition.FanBlade!
private var louver: WWMotionGraphicTransition.Louver!
override func viewDidLoad() {
super.viewDidLoad()
initSetting()
}
@IBAction func doorCurtainEffect(_ sender: UIButton) {
faceImageView.addSubview(doorCurtain)
doorCurtain.start(count: count, colors: colors, duration: duration)
}
@IBAction func fanBladeEffect(_ sender: UIButton) {
faceImageView.addSubview(fanBlade)
fanBlade.start(count: count, colors: colors, duration: duration)
}
@IBAction func louverEffect(_ sender: UIButton) {
faceImageView.addSubview(louver)
louver.start(count: count, colors: colors, duration: duration)
}
}
extension ViewController: WWMotionGraphicTransitionDelegate {
func start(effectView: UIView, number: Int, status: WWMotionGraphicTransition.Status) {
faceImageView.image = UIImage(named: "Face1")
if (number < count) { return }
if (status != .end) { return }
faceImageView.image = UIImage(named: "Face2")
if effectView is WWMotionGraphicTransition.DoorCurtain { doorCurtain.end(duration: duration); return }
if effectView is WWMotionGraphicTransition.FanBlade { fanBlade.end(duration: duration); return }
if effectView is WWMotionGraphicTransition.Louver { louver.end(duration: duration); return }
}
func end(effectView: UIView, number: Int, status: WWMotionGraphicTransition.Status) {
if (number < count) { return }
if (status != .end) { return }
if effectView is WWMotionGraphicTransition.DoorCurtain { doorCurtain.removeFromSuperview(); return }
if effectView is WWMotionGraphicTransition.FanBlade { fanBlade.removeFromSuperview(); return}
if effectView is WWMotionGraphicTransition.Louver { louver.removeFromSuperview(); return}
}
}
private extension ViewController {
func initSetting() {
doorCurtain = WWMotionGraphicTransition.DoorCurtain.build(frame: faceImageView.bounds)
doorCurtain.delegate = self
fanBlade = WWMotionGraphicTransition.FanBlade.build(frame: faceImageView.bounds)
fanBlade.delegate = self
louver = WWMotionGraphicTransition.Louver(frame: faceImageView.bounds)
louver.delegate = self
}
}