From 38eed436375182832350b012ba4ad6266362df92 Mon Sep 17 00:00:00 2001 From: winter Date: Thu, 23 Nov 2017 15:40:53 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=94=AF=E6=8C=81push=E5=92=8Cpop=E5=88=B0?= =?UTF-8?q?=E4=B8=8D=E5=90=8C=E9=A2=9C=E8=89=B2=E7=9A=84=E5=AF=BC=E8=88=AA?= =?UTF-8?q?=E6=A0=8FtitleColor=EF=BC=8CtintColor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Example/Base.lproj/Main.storyboard | 83 ++++++++++++------- Example/MainViewController.swift | 17 +++- Example/NavigationBarData.swift | 1 + ...tionController+KMNavigationBarTransition.m | 36 ++++---- ...ViewController+KMNavigationBarTransition.m | 4 + 5 files changed, 93 insertions(+), 48 deletions(-) diff --git a/Example/Base.lproj/Main.storyboard b/Example/Base.lproj/Main.storyboard index fadb03c..28df014 100644 --- a/Example/Base.lproj/Main.storyboard +++ b/Example/Base.lproj/Main.storyboard @@ -1,11 +1,11 @@ - + - + @@ -13,9 +13,9 @@ - + - + @@ -30,17 +30,17 @@ - + - + - + @@ -59,7 +59,7 @@ - + @@ -68,14 +68,14 @@ - + - + - + - + + + + + + + + + + + + + - + - + - + @@ -139,26 +163,27 @@ + - + - + - + @@ -166,6 +191,7 @@ + @@ -178,20 +204,20 @@ - + - + - + @@ -199,6 +225,7 @@ + @@ -226,6 +253,7 @@ + @@ -234,7 +262,4 @@ - - - diff --git a/Example/MainViewController.swift b/Example/MainViewController.swift index 9066fbd..29195b6 100644 --- a/Example/MainViewController.swift +++ b/Example/MainViewController.swift @@ -24,6 +24,7 @@ class MainViewController: UITableViewController { var currentNavigationBarData: NavigationBarData! var nextNavigationBarData: NavigationBarData! + @IBOutlet weak var nextNavigationBarTitleColorText: UILabel! @IBOutlet weak var nextNavigationBarTintColorText: UILabel! @IBOutlet weak var nextNavigatioBarBackgroundImageColorText: UILabel! @IBOutlet weak var nextNavigationBarPrefersHiddenSwitch: UISwitch! @@ -38,11 +39,18 @@ class MainViewController: UITableViewController { } nextNavigationBarData = currentNavigationBarData + nextNavigationBarTitleColorText.text = nextNavigationBarData.titleColor.rawValue nextNavigationBarTintColorText.text = nextNavigationBarData.barTintColor.rawValue nextNavigatioBarBackgroundImageColorText.text = nextNavigationBarData.backgroundImageColor.rawValue nextNavigationBarPrefersHiddenSwitch.isOn = nextNavigationBarData.prefersHidden nextNavigationBarPrefersShadowImageHiddenSwitch.isOn = nextNavigationBarData.prefersShadowImageHidden + + if let titleColor = currentNavigationBarData.titleColor.toUIColor { + navigationController?.navigationBar.tintColor = titleColor + navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: titleColor] + } + navigationController?.navigationBar.barTintColor = currentNavigationBarData.barTintColor.toUIColor navigationController?.navigationBar.setBackgroundImage(currentNavigationBarData.backgroundImageColor.toUIImage, for: .default) navigationController?.navigationBar.shadowImage = (currentNavigationBarData.prefersShadowImageHidden) ? UIImage() : nil @@ -91,7 +99,7 @@ extension MainViewController { override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { switch (indexPath.section, indexPath.row) { - case (0, 0), (0, 1): + case (0, 0), (0, 1), (0, 2): performSegue(withIdentifier: Constants.Segue.SetStyleIdentifier, sender: self) default: break @@ -134,6 +142,13 @@ extension MainViewController { self.nextNavigationBarData.backgroundImageColor = $0 self.nextNavigatioBarBackgroundImageColorText.text = $0.rawValue } + case (0, 2): + colorsArray = NavigationBarData.BackgroundImageColorArray + selectedIndex = colorsArray.index(of: NavigationBarBackgroundViewColor(rawValue: nextNavigationBarTitleColorText.text!)!) + block = { + self.nextNavigationBarData.titleColor = $0 + self.nextNavigationBarTitleColorText.text = $0.rawValue + } default: break } diff --git a/Example/NavigationBarData.swift b/Example/NavigationBarData.swift index 3f89129..b241306 100644 --- a/Example/NavigationBarData.swift +++ b/Example/NavigationBarData.swift @@ -13,6 +13,7 @@ struct NavigationBarData { static let BarTintColorArray: [NavigationBarBackgroundViewColor] = [.Cyan, .Yellow, .Green, .Orange, .lightGray, .NoValue] static let BackgroundImageColorArray: [NavigationBarBackgroundViewColor] = [.NoValue, .Transparent, .Cyan, .Yellow, .Green, .Orange, .lightGray] + var titleColor = NavigationBarData.BarTintColorArray.last! var barTintColor = NavigationBarData.BarTintColorArray.first! var backgroundImageColor = NavigationBarData.BackgroundImageColorArray.first! var prefersHidden = false diff --git a/KMNavigationBarTransition/UINavigationController+KMNavigationBarTransition.m b/KMNavigationBarTransition/UINavigationController+KMNavigationBarTransition.m index 9743056..28de765 100755 --- a/KMNavigationBarTransition/UINavigationController+KMNavigationBarTransition.m +++ b/KMNavigationBarTransition/UINavigationController+KMNavigationBarTransition.m @@ -89,12 +89,8 @@ - (UIViewController *)km_popViewControllerAnimated:(BOOL)animated { UIViewController *disappearingViewController = self.viewControllers.lastObject; [disappearingViewController km_addTransitionNavigationBarIfNeeded]; UIViewController *appearingViewController = self.viewControllers[self.viewControllers.count - 2]; - if (appearingViewController.km_transitionNavigationBar) { - UINavigationBar *appearingNavigationBar = appearingViewController.km_transitionNavigationBar; - self.navigationBar.barTintColor = appearingNavigationBar.barTintColor; - [self.navigationBar setBackgroundImage:[appearingNavigationBar backgroundImageForBarMetrics:UIBarMetricsDefault] forBarMetrics:UIBarMetricsDefault]; - self.navigationBar.shadowImage = appearingNavigationBar.shadowImage; - } + [self renewTheNavigationBar:appearingViewController.km_transitionNavigationBar]; + if (animated) { disappearingViewController.navigationController.km_backgroundViewHidden = YES; } @@ -107,12 +103,8 @@ - (UIViewController *)km_popViewControllerAnimated:(BOOL)animated { } UIViewController *disappearingViewController = self.viewControllers.lastObject; [disappearingViewController km_addTransitionNavigationBarIfNeeded]; - if (viewController.km_transitionNavigationBar) { - UINavigationBar *appearingNavigationBar = viewController.km_transitionNavigationBar; - self.navigationBar.barTintColor = appearingNavigationBar.barTintColor; - [self.navigationBar setBackgroundImage:[appearingNavigationBar backgroundImageForBarMetrics:UIBarMetricsDefault] forBarMetrics:UIBarMetricsDefault]; - self.navigationBar.shadowImage = appearingNavigationBar.shadowImage; - } + [self renewTheNavigationBar:viewController.km_transitionNavigationBar]; + if (animated) { disappearingViewController.navigationController.km_backgroundViewHidden = YES; } @@ -126,12 +118,8 @@ - (UIViewController *)km_popViewControllerAnimated:(BOOL)animated { UIViewController *disappearingViewController = self.viewControllers.lastObject; [disappearingViewController km_addTransitionNavigationBarIfNeeded]; UIViewController *rootViewController = self.viewControllers.firstObject; - if (rootViewController.km_transitionNavigationBar) { - UINavigationBar *appearingNavigationBar = rootViewController.km_transitionNavigationBar; - self.navigationBar.barTintColor = appearingNavigationBar.barTintColor; - [self.navigationBar setBackgroundImage:[appearingNavigationBar backgroundImageForBarMetrics:UIBarMetricsDefault] forBarMetrics:UIBarMetricsDefault]; - self.navigationBar.shadowImage = appearingNavigationBar.shadowImage; - } + [self renewTheNavigationBar:rootViewController.km_transitionNavigationBar]; + if (animated) { disappearingViewController.navigationController.km_backgroundViewHidden = YES; } @@ -149,6 +137,18 @@ - (void)km_setViewControllers:(NSArray *)viewControllers ani return [self km_setViewControllers:viewControllers animated:animated]; } +- (void)renewTheNavigationBar:(UINavigationBar *)appearingNavigationBar { + if (appearingNavigationBar == nil) { + return; + } + self.navigationBar.tintColor = appearingNavigationBar.tintColor; + self.navigationBar.titleTextAttributes = appearingNavigationBar.titleTextAttributes; + + self.navigationBar.barTintColor = appearingNavigationBar.barTintColor; + self.navigationBar.shadowImage = appearingNavigationBar.shadowImage; + [self.navigationBar setBackgroundImage:[appearingNavigationBar backgroundImageForBarMetrics:UIBarMetricsDefault] forBarMetrics:UIBarMetricsDefault]; +} + - (BOOL)km_backgroundViewHidden { return [objc_getAssociatedObject(self, _cmd) boolValue]; } diff --git a/KMNavigationBarTransition/UIViewController+KMNavigationBarTransition.m b/KMNavigationBarTransition/UIViewController+KMNavigationBarTransition.m index 3638125..c06547d 100644 --- a/KMNavigationBarTransition/UIViewController+KMNavigationBarTransition.m +++ b/KMNavigationBarTransition/UIViewController+KMNavigationBarTransition.m @@ -71,6 +71,8 @@ - (void)km_viewDidAppear:(BOOL)animated { [self km_restoreScrollViewContentInsetAdjustmentBehaviorIfNeeded]; UIViewController *transitionViewController = self.navigationController.km_transitionContextToViewController; if (self.km_transitionNavigationBar) { + self.navigationController.navigationBar.tintColor = self.km_transitionNavigationBar.tintColor; + self.navigationController.navigationBar.titleTextAttributes = self.km_transitionNavigationBar.titleTextAttributes; self.navigationController.navigationBar.barTintColor = self.km_transitionNavigationBar.barTintColor; [self.navigationController.navigationBar setBackgroundImage:[self.km_transitionNavigationBar backgroundImageForBarMetrics:UIBarMetricsDefault] forBarMetrics:UIBarMetricsDefault]; [self.navigationController.navigationBar setShadowImage:self.km_transitionNavigationBar.shadowImage]; @@ -132,6 +134,8 @@ - (void)km_addTransitionNavigationBarIfNeeded { if (bar.translucent != self.navigationController.navigationBar.translucent) { bar.translucent = self.navigationController.navigationBar.translucent; } + bar.tintColor = self.navigationController.navigationBar.tintColor; + bar.titleTextAttributes = self.navigationController.navigationBar.titleTextAttributes; bar.barTintColor = self.navigationController.navigationBar.barTintColor; [bar setBackgroundImage:[self.navigationController.navigationBar backgroundImageForBarMetrics:UIBarMetricsDefault] forBarMetrics:UIBarMetricsDefault]; bar.shadowImage = self.navigationController.navigationBar.shadowImage; From ea9c436718e386f4eb11a3fe4d50ee07c5b13b76 Mon Sep 17 00:00:00 2001 From: winter Date: Thu, 23 Nov 2017 15:42:30 +0800 Subject: [PATCH 2/2] swift4.0 --- Example/MainViewController.swift | 2 +- KMNavigationBarTransition.xcodeproj/project.pbxproj | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Example/MainViewController.swift b/Example/MainViewController.swift index 29195b6..1e45c2c 100644 --- a/Example/MainViewController.swift +++ b/Example/MainViewController.swift @@ -48,7 +48,7 @@ class MainViewController: UITableViewController { if let titleColor = currentNavigationBarData.titleColor.toUIColor { navigationController?.navigationBar.tintColor = titleColor - navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: titleColor] + navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: titleColor] } navigationController?.navigationBar.barTintColor = currentNavigationBarData.barTintColor.toUIColor diff --git a/KMNavigationBarTransition.xcodeproj/project.pbxproj b/KMNavigationBarTransition.xcodeproj/project.pbxproj index b0ffbab..db356c0 100644 --- a/KMNavigationBarTransition.xcodeproj/project.pbxproj +++ b/KMNavigationBarTransition.xcodeproj/project.pbxproj @@ -270,7 +270,7 @@ TargetAttributes = { CDA3726E1C3907CE00E39A6D = { CreatedOnToolsVersion = 7.2; - LastSwiftMigration = 0820; + LastSwiftMigration = 0910; }; CDC01B8F1E5CA42000F6F3E2 = { CreatedOnToolsVersion = 8.2.1; @@ -472,7 +472,8 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.mo.KMNavigationBarTransition-Example"; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; + SWIFT_SWIFT3_OBJC_INFERENCE = On; + SWIFT_VERSION = 4.0; }; name = Debug; }; @@ -485,7 +486,8 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.mo.KMNavigationBarTransition-Example"; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; + SWIFT_SWIFT3_OBJC_INFERENCE = On; + SWIFT_VERSION = 4.0; }; name = Release; };