WWMotionGraphicTransition

Swift-5.6 iOS-14.0 Swift Package Manager-SUCCESS LICENSE

Introduction - 简介

WWMotionGraphicTransition

Installation with Swift Package Manager

dependencies: [
    .package(url: "https://github.com/William-Weng/WWMotionGraphicTransition.git", .upToNextMajor(from: "1.2.2"))
]

可用函数 - Function

函数 说明
build() 创建实例
start(count:colors:duration:direction:) 动画开始
end(duration:direction:) 动画结束

可用效果 - Effect

效果 说明
DoorCurtain 像单片门帘开关的过场动画
FanBlade 像电风扇叶片旋转的过场动画
Louver 像百叶窗开合的过场动画

Example

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
    }
}