GKPushAnimatedTransition.swift
3.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
//
// GKPushAnimatedTransition.swift
// GKNavigationBarSwift
//
// Created by QuintGao on 2020/3/24.
// Copyright © 2020 QuintGao. All rights reserved.
//
import UIKit
open class GKPushAnimatedTransition: GKBaseAnimatedTransition {
public override func animateTransition() {
// 解决UITabBarController左滑push时的显示问题
self.isHideTabBar = (self.fromViewController.tabBarController != nil) && (self.toViewController.hidesBottomBarWhenPushed == true)
let tabBar = self.fromViewController.tabBarController?.tabBar
if (tabBar == nil) {
self.isHideTabBar = false
}
// tabBar位置不对或隐藏
if (tabBar?.frame.origin.x != 0 || tabBar?.isHidden == true) {
self.isHideTabBar = false
}
// 非根控制器
if (self.fromViewController.navigationController?.children.first != self.fromViewController) {
self.isHideTabBar = false
}
let screenW = self.containerView.bounds.size.width
let screenH = self.containerView.bounds.size.height
let fromView = UIView(frame: self.containerView.bounds)
fromView.addSubview(fromViewController.view)
var captureView: UIView? = nil
if self.isHideTabBar {
// 截取tabBar
let captureImage = GKConfigure.getCapture(with: tabBar!)
self.fromViewController.gk_captureImage = captureImage
captureView = UIImageView(image: captureImage)
var frame = tabBar!.frame;
frame.origin.x = 0
captureView?.frame = frame
fromView.addSubview(captureView!)
tabBar?.isHidden = true
}
if self.isScale {
self.shadowView = UIView(frame: CGRect(x: 0, y: 0, width: screenW, height: screenH))
self.shadowView.backgroundColor = UIColor.black.withAlphaComponent(0)
fromView.addSubview(self.shadowView)
fromView.transform = .identity
}
self.containerView.addSubview(fromView)
// 设置toViewController
self.toViewController.view.frame = CGRect(x: screenW, y: 0, width: screenW, height: screenH)
self.toViewController.view.layer.shadowColor = UIColor.black.cgColor
self.toViewController.view.layer.shadowOpacity = 0.15
self.toViewController.view.layer.shadowRadius = 3.0
self.containerView.addSubview(self.toViewController.view)
UIView.animate(withDuration: animationDuration(), animations: {
if self.isScale {
self.shadowView.backgroundColor = UIColor.black.withAlphaComponent(0.6)
fromView.transform = CGAffineTransform(scaleX: GKConfigure.gk_scaleX, y: GKConfigure.gk_scaleY)
}else {
var frame = fromView.frame
frame.origin.x = -0.3 * frame.size.width
fromView.frame = frame
}
self.toViewController.view.frame = CGRect(x: 0, y: 0, width: screenW, height: screenH)
}) { (finished) in
if self.isHideTabBar {
if (self.transitionContext.transitionWasCancelled) {
self.containerView.addSubview(self.fromViewController.view)
}else {
self.fromViewController.view.removeFromSuperview()
}
fromView.transform = .identity
fromView.removeFromSuperview()
if (captureView != nil) {
captureView?.removeFromSuperview()
captureView = nil
}
}
if self.isScale {
self.shadowView.removeFromSuperview()
}
self.completeTransition()
}
}
}