1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- //
- // ViewControllerAnimatedTransitioning.swift
- // Mastodon
- //
- // Created by MainasuK Cirno on 2021-4-28.
- //
- import os.log
- import UIKit
- protocol ViewControllerAnimatedTransitioningDelegate: AnyObject {
- var wantsInteractiveStart: Bool { get }
- func animationEnded(_ transitionCompleted: Bool)
- }
- class ViewControllerAnimatedTransitioning: NSObject {
- let operation: UINavigationController.Operation
- var transitionDuration: TimeInterval
- var transitionContext: UIViewControllerContextTransitioning!
- var isInteractive: Bool { return transitionContext.isInteractive }
- weak var delegate: ViewControllerAnimatedTransitioningDelegate?
- init(operation: UINavigationController.Operation) {
- assert(operation != .none)
- self.operation = operation
- self.transitionDuration = 0.3
- super.init()
- }
- deinit {
- os_log("%{public}s[%{public}ld], %{public}s", ((#file as NSString).lastPathComponent), #line, #function)
- }
- }
- // MARK: - UIViewControllerAnimatedTransitioning
- extension ViewControllerAnimatedTransitioning: UIViewControllerAnimatedTransitioning {
- func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
- return transitionDuration
- }
- func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
- self.transitionContext = transitionContext
- }
- func animationEnded(_ transitionCompleted: Bool) {
- delegate?.animationEnded(transitionCompleted)
- }
- }
- // MARK: - UIViewControllerInteractiveTransitioning
- extension ViewControllerAnimatedTransitioning: UIViewControllerInteractiveTransitioning {
- func startInteractiveTransition(_ transitionContext: UIViewControllerContextTransitioning) {
- self.transitionContext = transitionContext
- }
- var wantsInteractiveStart: Bool {
- return delegate?.wantsInteractiveStart ?? false
- }
- }
|