From 987579b0725dff239570d41e1b2bcf219b211ec4 Mon Sep 17 00:00:00 2001 From: ZCC Date: Mon, 8 Oct 2018 17:01:27 +0800 Subject: [PATCH 01/11] =?UTF-8?q?=E7=94=B5=E6=B1=A0=E6=9D=A1=E6=8E=A7?= =?UTF-8?q?=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ExtensionTool.xcodeproj/project.pbxproj | 4 ++ .../ExtensionTool/StatusBar+Ext.swift | 63 +++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 ExtensionTool/ExtensionTool/ExtensionTool/StatusBar+Ext.swift diff --git a/ExtensionTool/ExtensionTool.xcodeproj/project.pbxproj b/ExtensionTool/ExtensionTool.xcodeproj/project.pbxproj index cb0d1d4..ba7f9be 100644 --- a/ExtensionTool/ExtensionTool.xcodeproj/project.pbxproj +++ b/ExtensionTool/ExtensionTool.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + F00067E1216B52790033263B /* StatusBar+Ext.swift in Sources */ = {isa = PBXBuildFile; fileRef = F00067E0216B52790033263B /* StatusBar+Ext.swift */; }; F0102BC9215B1FE400C9537C /* LoadingAniView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0102BC8215B1FE400C9537C /* LoadingAniView.swift */; }; F0105B9A210AC3DC005B8661 /* MyPageControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0105B99210AC3DC005B8661 /* MyPageControl.swift */; }; F016903B2106F40D00E0C60A /* HorizontalLabelView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F016903A2106F40D00E0C60A /* HorizontalLabelView.swift */; }; @@ -78,6 +79,7 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + F00067E0216B52790033263B /* StatusBar+Ext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "StatusBar+Ext.swift"; sourceTree = ""; }; F0102BC8215B1FE400C9537C /* LoadingAniView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoadingAniView.swift; sourceTree = ""; }; F0105B99210AC3DC005B8661 /* MyPageControl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageControl.swift; sourceTree = ""; }; F016903A2106F40D00E0C60A /* HorizontalLabelView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HorizontalLabelView.swift; sourceTree = ""; }; @@ -342,6 +344,7 @@ F0B5D59B20FED64F00F642B1 /* UIView+Ext.swift */, F0B5D59A20FED64F00F642B1 /* UIViewController+Ext.swift */, F0D32FF821537822003AE04A /* WKWebView+Ext.swift */, + F00067E0216B52790033263B /* StatusBar+Ext.swift */, ); path = ExtensionTool; sourceTree = ""; @@ -488,6 +491,7 @@ F0B5D5AF20FED64F00F642B1 /* ExtensionTool.swift in Sources */, F0209BDB2154CB93006B417F /* MyNavigationBar.swift in Sources */, F0B5D5A320FED64F00F642B1 /* UITextView+Ext.swift in Sources */, + F00067E1216B52790033263B /* StatusBar+Ext.swift in Sources */, F0B5D5A920FED64F00F642B1 /* UIBarButtonItem+Ext.swift in Sources */, F0561C412101E6590007496F /* CameraViewController.swift in Sources */, F0B5D5A420FED64F00F642B1 /* UIImage+Ext.swift in Sources */, diff --git a/ExtensionTool/ExtensionTool/ExtensionTool/StatusBar+Ext.swift b/ExtensionTool/ExtensionTool/ExtensionTool/StatusBar+Ext.swift new file mode 100644 index 0000000..b685d73 --- /dev/null +++ b/ExtensionTool/ExtensionTool/ExtensionTool/StatusBar+Ext.swift @@ -0,0 +1,63 @@ +// +// StatusBar+Ext.swift +// ExtensionTool +// +// Created by 张崇超 on 2018/10/8. +// Copyright © 2018 ZCC. All rights reserved. +// + +import UIKit + +// plist文件 View controller-based status bar appearance Bool - NO +extension UIResponder { + + /// 设置电池条位置 + /// + /// - Parameter orient: 位置 + func k_setStatusBarOrientation(_ orient: UIDeviceOrientation) { + + var orientation: UIInterfaceOrientation = .portrait + if orient == .landscapeLeft || orient == .landscapeRight { + + orientation = orient == .landscapeLeft ? (.landscapeRight) : (.landscapeLeft) + } + UIApplication.shared.setStatusBarOrientation(orientation, animated: true) + } + + /// 设置电池条显隐 + /// + /// - Parameter isHidden: 显隐 + func k_setStatusBarHidden(_ isHidden: Bool) { + + UIApplication.shared.setStatusBarHidden(isHidden, with: UIStatusBarAnimation.fade) + } + + /// 设置电池条风格 + /// + /// - Parameter style: 风格 + func k_setStatusBarStyle(_ style: UIStatusBarStyle) { + + UIApplication.shared.setStatusBarStyle(style, animated: true) + } +} + +extension UINavigationController { + + open override var shouldAutorotate: Bool { + + return self.viewControllers.last?.shouldAutorotate ?? false + } + + open override var supportedInterfaceOrientations: UIInterfaceOrientationMask { + + return self.viewControllers.last?.supportedInterfaceOrientations ?? .portrait + } +} + +extension UITabBarController { + + open override var shouldAutorotate: Bool { + + return self.viewControllers?.first?.shouldAutorotate ?? false + } +} From 3a24b9ca2af0d457d55e91caa88095ff9ccf05a7 Mon Sep 17 00:00:00 2001 From: ZCC Date: Tue, 9 Oct 2018 10:05:15 +0800 Subject: [PATCH 02/11] =?UTF-8?q?HUDTool=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ExtensionTool.xcodeproj/project.pbxproj | 8 +- .../BaseViewTool/LoadingTool/HUDTool.swift | 99 ++++++++++++------- .../ExtensionTool/ViewController.swift | 2 +- 3 files changed, 68 insertions(+), 41 deletions(-) diff --git a/ExtensionTool/ExtensionTool.xcodeproj/project.pbxproj b/ExtensionTool/ExtensionTool.xcodeproj/project.pbxproj index ba7f9be..1cdca41 100644 --- a/ExtensionTool/ExtensionTool.xcodeproj/project.pbxproj +++ b/ExtensionTool/ExtensionTool.xcodeproj/project.pbxproj @@ -47,9 +47,9 @@ F077773C20F2FC3A003D7BD8 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F077773B20F2FC3A003D7BD8 /* Assets.xcassets */; }; F077773F20F2FC3A003D7BD8 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F077773D20F2FC3A003D7BD8 /* LaunchScreen.storyboard */; }; F085C48A21096E6F00CB0D2B /* CalendarView.xib in Resources */ = {isa = PBXBuildFile; fileRef = F085C48921096E6F00CB0D2B /* CalendarView.xib */; }; - F08AF251215F123B00AEAE53 /* HUDTool.swift in Sources */ = {isa = PBXBuildFile; fileRef = F08AF250215F123B00AEAE53 /* HUDTool.swift */; }; F091FBC8212BC47D00F347C3 /* NotificationCenter+Ext.swift in Sources */ = {isa = PBXBuildFile; fileRef = F091FBC7212BC47D00F347C3 /* NotificationCenter+Ext.swift */; }; F0963FB02159D1FC00C1EE5E /* AlertTool.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0963FAF2159D1FC00C1EE5E /* AlertTool.swift */; }; + F0A301A9216C437E00D71D58 /* HUDTool.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0A301A8216C437E00D71D58 /* HUDTool.swift */; }; F0B5D59C20FED64F00F642B1 /* AuthorityTool.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0B5D58520FED64F00F642B1 /* AuthorityTool.swift */; }; F0B5D59D20FED64F00F642B1 /* VideoPlayerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0B5D58620FED64F00F642B1 /* VideoPlayerView.swift */; }; F0B5D59E20FED64F00F642B1 /* kSaveDataTool.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0B5D58720FED64F00F642B1 /* kSaveDataTool.swift */; }; @@ -124,9 +124,9 @@ F077773E20F2FC3A003D7BD8 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; F077774020F2FC3A003D7BD8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; F085C48921096E6F00CB0D2B /* CalendarView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CalendarView.xib; sourceTree = ""; }; - F08AF250215F123B00AEAE53 /* HUDTool.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HUDTool.swift; sourceTree = ""; }; F091FBC7212BC47D00F347C3 /* NotificationCenter+Ext.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NotificationCenter+Ext.swift"; sourceTree = ""; }; F0963FAF2159D1FC00C1EE5E /* AlertTool.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlertTool.swift; sourceTree = ""; }; + F0A301A8216C437E00D71D58 /* HUDTool.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HUDTool.swift; sourceTree = ""; }; F0B5D58520FED64F00F642B1 /* AuthorityTool.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AuthorityTool.swift; sourceTree = ""; }; F0B5D58620FED64F00F642B1 /* VideoPlayerView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VideoPlayerView.swift; sourceTree = ""; }; F0B5D58720FED64F00F642B1 /* kSaveDataTool.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = kSaveDataTool.swift; sourceTree = ""; }; @@ -170,7 +170,7 @@ isa = PBXGroup; children = ( F0963FAF2159D1FC00C1EE5E /* AlertTool.swift */, - F08AF250215F123B00AEAE53 /* HUDTool.swift */, + F0A301A8216C437E00D71D58 /* HUDTool.swift */, ); path = LoadingTool; sourceTree = ""; @@ -440,6 +440,7 @@ F016907321072A1D00E0C60A /* HorizontalADView.swift in Sources */, F0B5D5A120FED64F00F642B1 /* CircleImageView.swift in Sources */, F0561C3F2101DEF50007496F /* CameraTool.swift in Sources */, + F0A301A9216C437E00D71D58 /* HUDTool.swift in Sources */, F0B5D59E20FED64F00F642B1 /* kSaveDataTool.swift in Sources */, F0F7B7C42117EED900AD0659 /* CircleView.swift in Sources */, F01DCECF2134F1F400512599 /* SecondViewController.swift in Sources */, @@ -449,7 +450,6 @@ F01EC3FC210879BD00AE2D11 /* CalendarView.swift in Sources */, F0963FB02159D1FC00C1EE5E /* AlertTool.swift in Sources */, F0B5D5A720FED64F00F642B1 /* AppDelegate+Push.swift in Sources */, - F08AF251215F123B00AEAE53 /* HUDTool.swift in Sources */, F02965BF2114404200EA4ADB /* BottomInputView1.swift in Sources */, F01DCEDF2135565100512599 /* PhotoBrowserTool.swift in Sources */, F02EF3442119955B0086C98A /* DownLoadViewTool.swift in Sources */, diff --git a/ExtensionTool/ExtensionTool/BaseViewTool/LoadingTool/HUDTool.swift b/ExtensionTool/ExtensionTool/BaseViewTool/LoadingTool/HUDTool.swift index dc3b6e9..479283d 100644 --- a/ExtensionTool/ExtensionTool/BaseViewTool/LoadingTool/HUDTool.swift +++ b/ExtensionTool/ExtensionTool/BaseViewTool/LoadingTool/HUDTool.swift @@ -30,6 +30,22 @@ import UIKit } } + /// 加载框 可取消 + func showLoadingCanCancle() { + + if Thread.isMainThread { + + HUDTool.initSelf.showLoadingHUD(nil, canCanle: true) + + } else { + + DispatchQueue.main.async { + + self.showLoadingCanCancle() + } + } + } + /// 加载框 // 加载框 + 文字 /// /// - Parameters: @@ -65,12 +81,6 @@ import UIKit /// - text: 文字 func showText(_ text: String?) { - guard let text = text else { - - self.hideHUD() - return - } - if Thread.isMainThread { HUDTool.initSelf.showTextHUD(text) @@ -102,6 +112,7 @@ import UIKit } enum HUDType { + /// 闲置, 文字, 菊花, 菊花 + 文字, 下载 + 文字 case none, text, loading, loadingWithText, progress } @@ -173,6 +184,7 @@ class HUDTool: UIView { } } + /// 定时器启动 private func startTimer() { if self.timer == nil { @@ -193,12 +205,14 @@ class HUDTool: UIView { } } + /// 销毁定时器 private func stopTimer() { self.timer?.cancel() self.timer = nil } + /// 获取文字宽高 private func getTextSize(_ text: String?, maxSize: CGSize) -> CGSize { guard let text = text else { return CGSize.zero } @@ -207,8 +221,12 @@ class HUDTool: UIView { return CGSize(width: min(rect.size.width + 15.0, self.textMaxWidth), height: max(rect.size.height + 15.0, self.textMinHeight)) } + /// 根据展示类型 控制控件显隐 + /// + /// - Parameter type: 类型 private func showSubView(_ type: HUDType = .none) { + self.showType = type self.stopTimer() self.blackView.isHidden = type == .none switch type { @@ -250,7 +268,7 @@ class HUDTool: UIView { let label = UILabel(frame: CGRect.zero) label.backgroundColor = UIColor.black label.textColor = UIColor.white - label.font = UIFont.systemFont(ofSize: 16.0) + label.font = self.textFont label.textAlignment = .center label.text = "提示文字" label.cornerRadius = self.textCornerRadius @@ -261,7 +279,7 @@ class HUDTool: UIView { }() /// 黑色的背景 private lazy var blackView: UIView = { - let view = UIView.init(frame: CGRect.zero) + let view = UIView(frame: CGRect.zero) view.backgroundColor = UIColor.black view.cornerRadius = self.blackCornerRadius view.clipsToBounds = true @@ -277,13 +295,12 @@ class HUDTool: UIView { }() /// 进度条View private lazy var progressView: UIView = { - let width: CGFloat = 45.0 let progressView = UIView(frame: CGRect(x: 0.0, y: 0.0, width: width, height: width)) progressView.backgroundColor = UIColor.white.withAlphaComponent(0.0) progressView.transform = CGAffineTransform(rotationAngle: -CGFloat.pi / 2.0) - let circle = UIBezierPath(ovalIn: CGRect.init(x: 0.0, y: 0.0, width: width, height: width)) + let circle = UIBezierPath(ovalIn: CGRect(x: 0.0, y: 0.0, width: width, height: width)) // 圆环 let shapeLayer = CAShapeLayer() @@ -303,6 +320,7 @@ class HUDTool: UIView { return progressView }() + /// 父视图 static private var baseView: UIWindow { let window = UIWindow(frame: UIScreen.main.bounds) window.isHidden = false @@ -313,13 +331,16 @@ class HUDTool: UIView { return window } - } extension HUDTool { + /// 展示 文字 + /// + /// - Parameter text: 文字 func showTextHUD(_ text: String?) { + if (text ?? "").k_isEmpty() { self.hidenLoadingHUD(); return } self.showSubView(.text) self.stopTimer() if self.superview == nil { @@ -329,7 +350,7 @@ extension HUDTool { self.textL.text = text self.blackView.frame = CGRect(origin: CGPoint.zero, size: self.getTextSize(text, maxSize: CGSize(width: self.textMaxWidth, height: 200.0))) - self.textL.frame = self.blackView.bounds + self.textL.frame = CGRect(origin: CGPoint.zero, size: self.getTextSize(text, maxSize: CGSize(width: self.textMaxWidth, height: 200.0))) self.blackView.center = self.center if self.isTurn { @@ -360,6 +381,7 @@ extension HUDTool { self.startTimer() } + /// 展示完毕 @objc func hidenTextHUD(_ isAnimated: Bool = true) { if isAnimated { @@ -378,6 +400,8 @@ extension HUDTool { self.removeFromSuperview() self.baseViewsArr.removeAll(keepingCapacity: false) + + self.showType = .none } } else { @@ -389,6 +413,11 @@ extension HUDTool { extension HUDTool { + /// 展示 菊花 + 文字 // 菊花 + /// + /// - Parameters: + /// - text: 文字 + /// - canCanle: 是否可以点击取消 func showLoadingHUD(_ text: String? = nil, canCanle: Bool = false) { self.showSubView(text == nil ? (.loading) : (.loadingWithText)) @@ -407,32 +436,22 @@ extension HUDTool { self.textL.frame = CGRect(origin: CGPoint(x: 0.0, y: self.activeView.frame.maxY + 8.0), size: CGSize(width: self.blackSizeWithT.width, height: 20.0)) } + /// 展示完毕 func hidenLoadingHUD(_ isAnimated: Bool = true) { if isAnimated { - - self.blackView.isHidden = true - self.textL.isHidden = true - self.activeView.stopAnimating() - self.removeFromSuperview() - self.baseViewsArr.removeAll(keepingCapacity: false) -// UIView.animate(withDuration: 0.2, animations: { -// -// self.blackView.alpha = 0.0 -// self.blackView.transform = CGAffineTransform(scaleX: 0.01, y: 0.01) -// -// }) { (isOk) in -// -// self.blackView.alpha = 1.0 -// self.blackView.transform = CGAffineTransform.identity -// self.blackView.isHidden = true -// self.textL.isHidden = true -// self.activeView.stopAnimating() -// -// self.removeFromSuperview() -// self.baseViewsArr.removeAll(keepingCapacity: false) -// } + if self.showType != .text { + + self.blackView.isHidden = true + self.textL.isHidden = true + self.activeView.stopAnimating() + + self.removeFromSuperview() + self.baseViewsArr.removeAll(keepingCapacity: false) + + self.showType = .none + } } else { @@ -445,6 +464,12 @@ extension HUDTool { extension HUDTool { + /// 展示 进度 + 文字 + /// + /// - Parameters: + /// - text: 文字 + /// - progress: 进度 0.0~1.0 + /// - block: 完成回调 func showProgressHUD(_ text: String, progress: CGFloat, block: (()->Void)? = nil) { self.showSubView(.progress) @@ -452,7 +477,7 @@ extension HUDTool { HUDTool.baseView.addSubview(self) } - if self.progressLayer?.strokeEnd == 0.0 { + if self.blackView.frame != CGRect(origin: CGPoint.zero, size: self.blackSizeWithT) { self.blackView.frame = CGRect(origin: CGPoint.zero, size: self.blackSizeWithT) self.progressView.center = CGPoint(x: self.blackView.center.x, y: self.blackView.center.y - 10.0) @@ -469,6 +494,7 @@ extension HUDTool { } } + /// 展示完毕 func hidenProgressHUD(_ isAnimated: Bool = true) { if isAnimated { @@ -487,6 +513,8 @@ extension HUDTool { self.progressView.isHidden = true self.progressLayer?.strokeEnd = 0.0 + self.showType = .none + self.removeFromSuperview() self.baseViewsArr.removeAll(keepingCapacity: false) } @@ -499,5 +527,4 @@ extension HUDTool { self.progressLayer?.strokeEnd = 0.0 } } - } diff --git a/ExtensionTool/ExtensionTool/ViewController.swift b/ExtensionTool/ExtensionTool/ViewController.swift index 9662ed0..7cdb873 100644 --- a/ExtensionTool/ExtensionTool/ViewController.swift +++ b/ExtensionTool/ExtensionTool/ViewController.swift @@ -20,7 +20,7 @@ class BaseViewController: UIViewController { self.view.backgroundColor = UIColor.k_colorWith(rgb: 216.0) self.k_setupMyNavBar() - } + } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } From d30b7b1ec9c06eec6d40adf6963b8ab19fb47db0 Mon Sep 17 00:00:00 2001 From: ZCC Date: Tue, 9 Oct 2018 17:35:24 +0800 Subject: [PATCH 03/11] =?UTF-8?q?=E8=AE=A1=E7=AE=97=E5=B1=9E=E6=80=A7?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E5=AD=98=E5=82=A8=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ExtensionTool/ExtensionTool/AppDelegate.swift | 34 +++++++++++++++++ .../ExtensionTool/ExtensionTool.swift | 37 ++++++------------- .../ExtensionTool/UIViewController+Ext.swift | 6 +-- 3 files changed, 47 insertions(+), 30 deletions(-) diff --git a/ExtensionTool/ExtensionTool/AppDelegate.swift b/ExtensionTool/ExtensionTool/AppDelegate.swift index 94df378..fb642c1 100644 --- a/ExtensionTool/ExtensionTool/AppDelegate.swift +++ b/ExtensionTool/ExtensionTool/AppDelegate.swift @@ -24,6 +24,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { window?.rootViewController = nav self.setNavigation() + self.setCommonData() return true } @@ -41,5 +42,38 @@ class AppDelegate: UIResponder, UIApplicationDelegate { // 设置导航栏上按钮的颜色 navbar.tintColor = UIColor.white } + + func setCommonData() { + + kWindow = self.window! + kRootVC = self.window!.rootViewController + + var systemInfo = utsname() + uname(&systemInfo) + let machineMirror = Mirror(reflecting: systemInfo.machine) + + let identifier = machineMirror.children.reduce("") { identifier, element in + guard let value = element.value as? Int8, value != 0 else { return identifier } + return identifier + String(UnicodeScalar(UInt8(value))) + } + let arr = identifier.components(separatedBy: ",") + if (arr.first ?? "") == "x86_64" { + + kIsIphoneX = kHeight > 736.0 + + } else { + + kIsIphoneX = (((arr.first ?? "") == "iPhone10") && ((arr.last ?? "") == "3" || (arr.last ?? "") == "6")) || (arr.first ?? "") >= "iPhone11" + } + + if #available(iOS 11.0, *) { + + kIsIphoneX = self.window!.safeAreaInsets.bottom > 0.0 + + } else { + + kIsIphoneX = false + } + } } diff --git a/ExtensionTool/ExtensionTool/ExtensionTool/ExtensionTool.swift b/ExtensionTool/ExtensionTool/ExtensionTool/ExtensionTool.swift index d79463e..3226600 100644 --- a/ExtensionTool/ExtensionTool/ExtensionTool/ExtensionTool.swift +++ b/ExtensionTool/ExtensionTool/ExtensionTool/ExtensionTool.swift @@ -8,38 +8,25 @@ import UIKit -/// 是否是iphoneX -var kIsIphoneX: Bool { - var systemInfo = utsname() - uname(&systemInfo) - let machineMirror = Mirror(reflecting: systemInfo.machine) - - let identifier = machineMirror.children.reduce("") { identifier, element in - guard let value = element.value as? Int8, value != 0 else { return identifier } - return identifier + String(UnicodeScalar(UInt8(value))) - } - let arr = identifier.components(separatedBy: ",") - if (arr.first ?? "") == "x86_64" { - - return kHeight > 736.0 - } - return ((arr.first ?? "") == "iPhone10") && ((arr.last ?? "") == "3" || (arr.last ?? "") == "6") -} +/// 是否是iphoneX 是否有安全区域 +var kIsIphoneX: Bool! +/// 主窗口 +var kWindow: UIWindow! +/// 根试图控制器 +var kRootVC: UIViewController! + +/// AppDeleagte +let kAppDelegate: AppDelegate = UIApplication.shared.delegate as! AppDelegate /// 标签栏高度 -let kTabBarHeight: CGFloat = 49.0 +let kTabBarHeight: CGFloat = kIsIphoneX ? (49.0 + 34.0) : (49.0) /// 导航栏高度 -let kNavBarHeight: CGFloat = kIsIphoneX ? (88.0) : (64.0) +let kNavBarHeight: CGFloat = kIsIphoneX ? (64.0 + 20.0) : (64.0) /// 底部不可控区域 let kBottomSpace: CGFloat = kIsIphoneX ? (34.0) : (0.0) /// 屏幕宽 let kWidth: CGFloat = UIScreen.main.bounds.size.width /// 屏幕高 let kHeight: CGFloat = UIScreen.main.bounds.size.height -/// 主窗口 -let kWindow: UIWindow = UIApplication.shared.keyWindow! -/// 根试图控制器 -let kRootVC: UIViewController = kWindow.rootViewController! -/// AppDeleagte -let kAppDelegate: AppDelegate = UIApplication.shared.delegate as! AppDelegate + /// 系统版本 let kVersion: CGFloat = UIDevice.current.systemVersion.k_toCGFloat() diff --git a/ExtensionTool/ExtensionTool/ExtensionTool/UIViewController+Ext.swift b/ExtensionTool/ExtensionTool/ExtensionTool/UIViewController+Ext.swift index cc11b02..77ba594 100644 --- a/ExtensionTool/ExtensionTool/ExtensionTool/UIViewController+Ext.swift +++ b/ExtensionTool/ExtensionTool/ExtensionTool/UIViewController+Ext.swift @@ -37,7 +37,7 @@ extension NSObject { } /// 当前活跃的控制器 var k_currentVC: UIViewController { - return self.currentVC() + return self.getCurrentVC() } /// 当前活跃的导航栏 /// @@ -61,10 +61,6 @@ extension NSObject { /// 当前活跃的控制器 /// /// - Returns: 控制器 - fileprivate func currentVC() -> UIViewController { - - return self.getCurrentVC() - } fileprivate func getCurrentVC(checkVC: UIViewController? = nil) -> UIViewController { var rVC: UIViewController = checkVC == nil ? (kRootVC) : (checkVC!) From 08a3ff0ada7e6b7fd34cd8161a0c78b7a9f3f7d6 Mon Sep 17 00:00:00 2001 From: ZCC Date: Tue, 9 Oct 2018 17:43:50 +0800 Subject: [PATCH 04/11] =?UTF-8?q?stroyboard=E5=A4=9A=E4=BA=BA=E5=BC=80?= =?UTF-8?q?=E5=8F=91=E4=BD=BF=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ExtensionTool.xcodeproj/project.pbxproj | 4 ++ ExtensionTool/ExtensionTool/AppDelegate.swift | 6 +- .../ExtensionTool/Base.lproj/Main.storyboard | 51 ++++++++-------- .../Base.lproj/Main1~.storyboard | 42 +++++++++++++ ExtensionTool/ExtensionTool/Main1.storyboard | 39 ++++++++++++ ExtensionTool/ExtensionTool/Main1~.storyboard | 59 +++++++++++++++++++ 6 files changed, 170 insertions(+), 31 deletions(-) create mode 100644 ExtensionTool/ExtensionTool/Base.lproj/Main1~.storyboard create mode 100644 ExtensionTool/ExtensionTool/Main1.storyboard create mode 100644 ExtensionTool/ExtensionTool/Main1~.storyboard diff --git a/ExtensionTool/ExtensionTool.xcodeproj/project.pbxproj b/ExtensionTool/ExtensionTool.xcodeproj/project.pbxproj index 1cdca41..76b51b6 100644 --- a/ExtensionTool/ExtensionTool.xcodeproj/project.pbxproj +++ b/ExtensionTool/ExtensionTool.xcodeproj/project.pbxproj @@ -50,6 +50,7 @@ F091FBC8212BC47D00F347C3 /* NotificationCenter+Ext.swift in Sources */ = {isa = PBXBuildFile; fileRef = F091FBC7212BC47D00F347C3 /* NotificationCenter+Ext.swift */; }; F0963FB02159D1FC00C1EE5E /* AlertTool.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0963FAF2159D1FC00C1EE5E /* AlertTool.swift */; }; F0A301A9216C437E00D71D58 /* HUDTool.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0A301A8216C437E00D71D58 /* HUDTool.swift */; }; + F0A301CE216CAFA600D71D58 /* Main1.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F0A301CD216CAFA600D71D58 /* Main1.storyboard */; }; F0B5D59C20FED64F00F642B1 /* AuthorityTool.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0B5D58520FED64F00F642B1 /* AuthorityTool.swift */; }; F0B5D59D20FED64F00F642B1 /* VideoPlayerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0B5D58620FED64F00F642B1 /* VideoPlayerView.swift */; }; F0B5D59E20FED64F00F642B1 /* kSaveDataTool.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0B5D58720FED64F00F642B1 /* kSaveDataTool.swift */; }; @@ -127,6 +128,7 @@ F091FBC7212BC47D00F347C3 /* NotificationCenter+Ext.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NotificationCenter+Ext.swift"; sourceTree = ""; }; F0963FAF2159D1FC00C1EE5E /* AlertTool.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlertTool.swift; sourceTree = ""; }; F0A301A8216C437E00D71D58 /* HUDTool.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HUDTool.swift; sourceTree = ""; }; + F0A301CD216CAFA600D71D58 /* Main1.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main1.storyboard; sourceTree = ""; }; F0B5D58520FED64F00F642B1 /* AuthorityTool.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AuthorityTool.swift; sourceTree = ""; }; F0B5D58620FED64F00F642B1 /* VideoPlayerView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VideoPlayerView.swift; sourceTree = ""; }; F0B5D58720FED64F00F642B1 /* kSaveDataTool.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = kSaveDataTool.swift; sourceTree = ""; }; @@ -270,6 +272,7 @@ F077773420F2FC39003D7BD8 /* AppDelegate.swift */, F077773620F2FC39003D7BD8 /* ViewController.swift */, F077773820F2FC39003D7BD8 /* Main.storyboard */, + F0A301CD216CAFA600D71D58 /* Main1.storyboard */, F01DCECE2134F1F400512599 /* SecondViewController.swift */, F077773B20F2FC3A003D7BD8 /* Assets.xcassets */, F077773D20F2FC3A003D7BD8 /* LaunchScreen.storyboard */, @@ -419,6 +422,7 @@ files = ( F077773F20F2FC3A003D7BD8 /* LaunchScreen.storyboard in Resources */, F02965BA2114404200EA4ADB /* EmotionPlist.plist in Resources */, + F0A301CE216CAFA600D71D58 /* Main1.storyboard in Resources */, F0561C3A2101DC5C0007496F /* Localizable.strings in Resources */, F085C48A21096E6F00CB0D2B /* CalendarView.xib in Resources */, F077773C20F2FC3A003D7BD8 /* Assets.xcassets in Resources */, diff --git a/ExtensionTool/ExtensionTool/AppDelegate.swift b/ExtensionTool/ExtensionTool/AppDelegate.swift index fb642c1..40f2e6e 100644 --- a/ExtensionTool/ExtensionTool/AppDelegate.swift +++ b/ExtensionTool/ExtensionTool/AppDelegate.swift @@ -19,10 +19,8 @@ class AppDelegate: UIResponder, UIApplicationDelegate { window = UIWindow.init(frame: UIScreen.main.bounds) window?.makeKeyAndVisible() - let vc = UIStoryboard.init(name: "Main", bundle: nil).instantiateInitialViewController()! - let nav = UINavigationController.init(rootViewController: vc) - - window?.rootViewController = nav + let rootVC = UIStoryboard.init(name: "Main", bundle: nil).instantiateInitialViewController()! + window?.rootViewController = rootVC self.setNavigation() self.setCommonData() diff --git a/ExtensionTool/ExtensionTool/Base.lproj/Main.storyboard b/ExtensionTool/ExtensionTool/Base.lproj/Main.storyboard index 34d75d5..d9d50d1 100644 --- a/ExtensionTool/ExtensionTool/Base.lproj/Main.storyboard +++ b/ExtensionTool/ExtensionTool/Base.lproj/Main.storyboard @@ -1,42 +1,39 @@ - + - - - + + - - - - - - - - - - - - - - - - + + + + + + + + + + - + + + + + + + + + + + diff --git a/ExtensionTool/ExtensionTool/Base.lproj/Main1~.storyboard b/ExtensionTool/ExtensionTool/Base.lproj/Main1~.storyboard new file mode 100644 index 0000000..34d75d5 --- /dev/null +++ b/ExtensionTool/ExtensionTool/Base.lproj/Main1~.storyboard @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ExtensionTool/ExtensionTool/Main1.storyboard b/ExtensionTool/ExtensionTool/Main1.storyboard new file mode 100644 index 0000000..3e279f9 --- /dev/null +++ b/ExtensionTool/ExtensionTool/Main1.storyboard @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ExtensionTool/ExtensionTool/Main1~.storyboard b/ExtensionTool/ExtensionTool/Main1~.storyboard new file mode 100644 index 0000000..3efc8dd --- /dev/null +++ b/ExtensionTool/ExtensionTool/Main1~.storyboard @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From d5401559af4ac3c88700c7e4b622fdfddef8ae15 Mon Sep 17 00:00:00 2001 From: ZCC Date: Thu, 11 Oct 2018 11:12:24 +0800 Subject: [PATCH 05/11] no message --- .../UINavBarTool/MyNavigationBar.swift | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/ExtensionTool/ExtensionTool/BaseViewTool/UINavBarTool/MyNavigationBar.swift b/ExtensionTool/ExtensionTool/BaseViewTool/UINavBarTool/MyNavigationBar.swift index 85b8ea7..368ac54 100644 --- a/ExtensionTool/ExtensionTool/BaseViewTool/UINavBarTool/MyNavigationBar.swift +++ b/ExtensionTool/ExtensionTool/BaseViewTool/UINavBarTool/MyNavigationBar.swift @@ -65,16 +65,20 @@ extension UIViewController: UIGestureRecognizerDelegate { guard let navController = self.navigationController else { return } // 隐藏系统的 + navController.navigationBar.isTranslucent = false navController.navigationBar.isHidden = true // 创建自己的 let navBar = MyNavigationBar.init() let size = UIApplication.shared.statusBarFrame.size - navBar.frame = CGRect(x: 0, y: size.height, width: size.width, height: 44) + let y = kVersion < 10.0 ? (0.0) : (size.height) + let height: CGFloat = kVersion < 10.0 ? (64.0) : (44.0) + navBar.frame = CGRect(x: 0, y: y, width: size.width, height: height) + self.view.clipsToBounds = true self.view.addSubview(navBar) - - navBar.barTintColor = UIColor.red + + navBar.barTintColor = UIColor.k_colorWith(r: 30.0, g: 59.0, b: 145.0, alpha: 1.0) navBar.isTranslucent = false navBar.tintColor = UIColor.white navBar.titleTextAttributes = @@ -109,12 +113,12 @@ extension UIViewController: UIGestureRecognizerDelegate { UIView.animate(withDuration: 0.25) { - self.k_navigationBar?.transform = hidden ? (CGAffineTransform(translationX: 0.0, y: -kNavBarHeight)) : (CGAffineTransform.identity) + self.k_navigationBar?.transform = hidden ? (CGAffineTransform(translationX: 0.0, y: -kNavBarHeight - 10.0)) : (CGAffineTransform.identity) } } else { - self.k_navigationBar?.transform = hidden ? (CGAffineTransform(translationX: 0.0, y: -kNavBarHeight)) : (CGAffineTransform.identity) + self.k_navigationBar?.transform = hidden ? (CGAffineTransform(translationX: 0.0, y: -kNavBarHeight - 10.0)) : (CGAffineTransform.identity) } } @@ -145,8 +149,8 @@ extension UIViewController: UIGestureRecognizerDelegate { } /// 是否允许手势 - private func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive press: UIPress) -> Bool { - + public func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool { + guard let navController = self.navigationController else { return true } if gestureRecognizer.isEqual(navController.interactivePopGestureRecognizer) { From 65d79490d60ffc869dcf6fcec7e63dfc7772e47e Mon Sep 17 00:00:00 2001 From: ZCC Date: Thu, 11 Oct 2018 15:59:43 +0800 Subject: [PATCH 06/11] no message --- .../BaseViewTool/UINavBarTool/MyNavigationBar.swift | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/ExtensionTool/ExtensionTool/BaseViewTool/UINavBarTool/MyNavigationBar.swift b/ExtensionTool/ExtensionTool/BaseViewTool/UINavBarTool/MyNavigationBar.swift index 368ac54..8aff465 100644 --- a/ExtensionTool/ExtensionTool/BaseViewTool/UINavBarTool/MyNavigationBar.swift +++ b/ExtensionTool/ExtensionTool/BaseViewTool/UINavBarTool/MyNavigationBar.swift @@ -85,7 +85,13 @@ extension UIViewController: UIGestureRecognizerDelegate { [.foregroundColor: UIColor.white] navBar.pushItem(self.k_setupNavitionItem()!, animated: false) - navController.interactivePopGestureRecognizer?.delegate = self + + weak var weakSelf = self + if navController.responds(to: #selector(getter: UINavigationController.interactivePopGestureRecognizer)) { + + navController.interactivePopGestureRecognizer?.delegate = weakSelf + } + self.k_navigationBar = navBar } @@ -149,7 +155,7 @@ extension UIViewController: UIGestureRecognizerDelegate { } /// 是否允许手势 - public func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool { + public func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool { guard let navController = self.navigationController else { return true } if gestureRecognizer.isEqual(navController.interactivePopGestureRecognizer) { From ba0a51737d476a710b83366f2abb160323d70a18 Mon Sep 17 00:00:00 2001 From: ZCC Date: Mon, 15 Oct 2018 15:57:36 +0800 Subject: [PATCH 07/11] =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ExtensionTool.xcodeproj/project.pbxproj | 4 - ExtensionTool/ExtensionTool/AppDelegate.swift | 2 + .../BaseViewTool/LanguageTool.swift | 190 ++++++++++++++---- .../ExtensionTool/Localized+Ext.swift | 77 ------- .../NotificationCenter+Ext.swift | 1 + .../ExtensionTool/UIBarButtonItem+Ext.swift | 11 +- .../ExtensionTool/UITextView+Ext.swift | 4 +- ExtensionTool/ExtensionTool/Main1.storyboard | 13 +- ExtensionTool/ExtensionTool/Main1~.storyboard | 59 ------ .../ExtensionTool/SecondViewController.swift | 2 +- .../ExtensionTool/ViewController.swift | 27 +++ ExtensionTool/en.lproj/Localizable.strings | 18 +- .../zh-Hans.lproj/Localizable.strings | 18 +- 13 files changed, 230 insertions(+), 196 deletions(-) delete mode 100644 ExtensionTool/ExtensionTool/ExtensionTool/Localized+Ext.swift delete mode 100644 ExtensionTool/ExtensionTool/Main1~.storyboard diff --git a/ExtensionTool/ExtensionTool.xcodeproj/project.pbxproj b/ExtensionTool/ExtensionTool.xcodeproj/project.pbxproj index 76b51b6..d09f732 100644 --- a/ExtensionTool/ExtensionTool.xcodeproj/project.pbxproj +++ b/ExtensionTool/ExtensionTool.xcodeproj/project.pbxproj @@ -35,7 +35,6 @@ F0412021210079BB0003F7A2 /* Timer+Ext.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0412020210079BB0003F7A2 /* Timer+Ext.swift */; }; F054045321002C9600E3EF87 /* PushFromStr+Ext.swift in Sources */ = {isa = PBXBuildFile; fileRef = F054045221002C9600E3EF87 /* PushFromStr+Ext.swift */; }; F0561C2F2101BA950007496F /* UILabel+Ext.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0561C2E2101BA950007496F /* UILabel+Ext.swift */; }; - F0561C312101CFED0007496F /* Localized+Ext.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0561C302101CFED0007496F /* Localized+Ext.swift */; }; F0561C372101DBCA0007496F /* LanguageTool.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0561C362101DBCA0007496F /* LanguageTool.swift */; }; F0561C3A2101DC5C0007496F /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = F0561C3C2101DC5C0007496F /* Localizable.strings */; }; F0561C3F2101DEF50007496F /* CameraTool.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0561C3E2101DEF50007496F /* CameraTool.swift */; }; @@ -110,7 +109,6 @@ F04930F920F4A08700787CC8 /* ExtensionTool.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = ExtensionTool.entitlements; sourceTree = ""; }; F054045221002C9600E3EF87 /* PushFromStr+Ext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PushFromStr+Ext.swift"; sourceTree = ""; }; F0561C2E2101BA950007496F /* UILabel+Ext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UILabel+Ext.swift"; sourceTree = ""; }; - F0561C302101CFED0007496F /* Localized+Ext.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Localized+Ext.swift"; sourceTree = ""; }; F0561C362101DBCA0007496F /* LanguageTool.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LanguageTool.swift; sourceTree = ""; }; F0561C3B2101DC5C0007496F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; F0561C3D2101DC670007496F /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; @@ -329,7 +327,6 @@ F0B5D58F20FED64F00F642B1 /* Date+Ext.swift */, F0B5D59720FED64F00F642B1 /* DispatchQueue+Ext.swift */, F0B5D59920FED64F00F642B1 /* ExtensionTool.swift */, - F0561C302101CFED0007496F /* Localized+Ext.swift */, F091FBC7212BC47D00F347C3 /* NotificationCenter+Ext.swift */, F0B5D59820FED64F00F642B1 /* Number+Ext.swift */, F054045221002C9600E3EF87 /* PushFromStr+Ext.swift */, @@ -457,7 +454,6 @@ F02965BF2114404200EA4ADB /* BottomInputView1.swift in Sources */, F01DCEDF2135565100512599 /* PhotoBrowserTool.swift in Sources */, F02EF3442119955B0086C98A /* DownLoadViewTool.swift in Sources */, - F0561C312101CFED0007496F /* Localized+Ext.swift in Sources */, F0B5D5AE20FED64F00F642B1 /* Number+Ext.swift in Sources */, F01EC3F821083FC000AE2D11 /* BarrageView.swift in Sources */, F021414621056CC40067D1E5 /* CameraListViewController.swift in Sources */, diff --git a/ExtensionTool/ExtensionTool/AppDelegate.swift b/ExtensionTool/ExtensionTool/AppDelegate.swift index 40f2e6e..f647b65 100644 --- a/ExtensionTool/ExtensionTool/AppDelegate.swift +++ b/ExtensionTool/ExtensionTool/AppDelegate.swift @@ -24,6 +24,8 @@ class AppDelegate: UIResponder, UIApplicationDelegate { self.setNavigation() self.setCommonData() + LanguageTool.initUserLanguage() + return true } diff --git a/ExtensionTool/ExtensionTool/BaseViewTool/LanguageTool.swift b/ExtensionTool/ExtensionTool/BaseViewTool/LanguageTool.swift index db6583e..686c5d9 100755 --- a/ExtensionTool/ExtensionTool/BaseViewTool/LanguageTool.swift +++ b/ExtensionTool/ExtensionTool/BaseViewTool/LanguageTool.swift @@ -8,66 +8,170 @@ import UIKit -extension String { +enum LanguageType { + case en, ch +} + +private let kLocalLanguageKey: String = "kLocalLanguageKey" + +class LanguageTool: NSObject { + + static let tool: LanguageTool = LanguageTool() - /// 国际化文字 - func localized() -> String { + /// 文件加载路径 + static var bundle: Bundle? + /// 当前语言 + static var currentLanguage: LanguageType { - return NSLocalizedString(self, comment: "") - //return LanguageTool.getString(key: self) + return ((UserDefaults.standard.value(forKey: kLocalLanguageKey) as? String) ?? "en") == "en" ? (.en) : (.ch) } -} + + /// 初始化本地语言 + class func initUserLanguage() { + + UIButton.initLocalized() + UILabel.initLocalized() + UITextField.initLocalized() -let UserLanguage = "UserLanguage" -let AppleLanguages = "AppleLanguages" + var currentLanguage = UserDefaults.standard.value(forKey: kLocalLanguageKey) as? String + if currentLanguage == nil { + + currentLanguage = Locale.preferredLanguages.first ?? "en" + currentLanguage = currentLanguage!.hasPrefix("zh") ? ("zh-Hans") : ("en") + UserDefaults.standard.setValue(currentLanguage, forKey: kLocalLanguageKey) + UserDefaults.standard.synchronize() + } + let path = Bundle.main.path(forResource: currentLanguage, ofType: "lproj")! + LanguageTool.bundle = Bundle.init(path: path) + } + + /// 设置语言类型 + /// + /// - Parameter type: 类型 + class func setUserLanguage(_ type: LanguageType) { + + let typeStr: String = type == .en ? ("en") : ("zh-Hans") + let currentLanguage: String = (UserDefaults.standard.value(forKey: kLocalLanguageKey) as? String) ?? "en" + + if currentLanguage == typeStr { + + debugPrint("语言切换为:\(typeStr == "en" ? ("英文") : ("中文"))") + kWindow?.k_post(name: .userLanguageChanged) + return + } + UserDefaults.standard.setValue(typeStr, forKey: kLocalLanguageKey) + UserDefaults.standard.synchronize() + + let path = Bundle.main.path(forResource: typeStr, ofType: "lproj")! + LanguageTool.bundle = Bundle.init(path: path) + + debugPrint("语言切换为:\(typeStr == "en" ? ("英文") : ("中文"))") + kWindow?.k_post(name: .userLanguageChanged) + } +} -class LanguageTool: NSObject { - - static let shareInstance = LanguageTool() +extension String { - /// 偏好设置 - let def = UserDefaults.standard - var bundle : Bundle? + var localiedStr: String { + + let changedStr: String = LanguageTool.bundle?.localizedString(forKey: "k\(self)", value: nil, table: "Localizable") ?? self + if changedStr != "k\(self)" { + + return changedStr + } + return self + } +} + +extension UIButton { - /// 获取key对应的字符串 - class func getString(key: String) -> String{ - let bundle = LanguageTool.shareInstance.bundle - let str = bundle?.localizedString(forKey: key, value: nil, table: nil) + /// 实现国际化 + static func initLocalized() { - return str ?? key + let originalMethod = class_getInstanceMethod(UIButton.self, #selector(UIButton.setTitle(_:for:))) + let changedmethod = class_getInstanceMethod(UIButton.self, #selector(mySetTitle(_:for:))) + method_exchangeImplementations(originalMethod!, changedmethod!) + } + @objc func mySetTitle(_ text: String, for state: UIControl.State) { + + mySetTitle(text.localiedStr, for: state) } - /// 初始化语言 - func initUserLanguage() { + open override func didMoveToSuperview() { + super.didMoveToSuperview() - var string: String = def.value(forKey: UserLanguage) as? String ?? "" - if string == "" { + if self.superview != nil { - let languages = def.object(forKey: AppleLanguages) as? NSArray - if languages?.count != 0 { - let current = languages?.object(at: 0) as? String - if current != nil { - string = current! - def.set(current, forKey: UserLanguage) - def.synchronize() - } + self.k_addObserver(name: .userLanguageChanged) { [weak self] (note) in + + self?.setTitle(self?.currentTitle, for: self?.state ?? .normal) } + + } else { + + self.k_removeObserver(name: .userLanguageChanged) } - string = string.replacingOccurrences(of: "-CN", with: "") - string = string.replacingOccurrences(of: "-US", with: "") - var path = Bundle.main.path(forResource:string , ofType: "lproj") - if path == nil { - path = Bundle.main.path(forResource:"en" , ofType: "lproj") + } +} + +extension UILabel { + + /// 实现国际化 + static func initLocalized() { + + let originalMethod = class_getInstanceMethod(UILabel.self, #selector(setter: UILabel.text)) + let swizzledMethod = class_getInstanceMethod(UILabel.self, #selector(UILabel.mySetText(_:))) + method_exchangeImplementations(originalMethod!, swizzledMethod!) + } + @objc func mySetText( _ text: String) { + + mySetText(text.localiedStr) + } + + open override func didMoveToSuperview() { + super.didMoveToSuperview() + + if self.superview != nil { + + self.k_addObserver(name: .userLanguageChanged) { [weak self] (note) in + + self?.text = self?.text + } + + } else { + + self.k_removeObserver(name: .userLanguageChanged) } - bundle = Bundle(path: path!) + } +} + +extension UITextField { + + /// 实现国际化 + static func initLocalized() { + + let originalMethod = class_getInstanceMethod(UITextField.self, #selector(setter: UITextField.placeholder)) + let changedmethod = class_getInstanceMethod(UITextField.self, #selector(mySetText(_:))) + method_exchangeImplementations(originalMethod!, changedmethod!) + } + @objc func mySetText( _ text: String) { + + mySetText(text.localiedStr) } - /// 设置语言 - func setLanguage(langeuage: String) { + open override func didMoveToSuperview() { + super.didMoveToSuperview() - let path = Bundle.main.path(forResource:langeuage , ofType: "lproj") - bundle = Bundle(path: path!) - def.set(langeuage, forKey: UserLanguage) - def.synchronize() + if self.superview != nil { + + self.k_addObserver(name: .userLanguageChanged) { [weak self] (note) in + + self?.placeholder = self?.placeholder + } + + } else { + + self.k_removeObserver(name: .userLanguageChanged) + } } } diff --git a/ExtensionTool/ExtensionTool/ExtensionTool/Localized+Ext.swift b/ExtensionTool/ExtensionTool/ExtensionTool/Localized+Ext.swift deleted file mode 100644 index 09737a3..0000000 --- a/ExtensionTool/ExtensionTool/ExtensionTool/Localized+Ext.swift +++ /dev/null @@ -1,77 +0,0 @@ -// -// UIKit+Localized.swift -// SuperVolley -// -// Created by Zebra on 2018/7/20. -// Copyright © 2018年 Zebra. All rights reserved. -// - -import UIKit - -/* - UIButton.initLocalized() - UILabel.initLocalized() - UITextField.initLocalized() - UITextView.initLocalized() - */ -extension UILabel { - - /// 实现国际化 - static func initLocalized() { - - let originalMethod = class_getInstanceMethod(UILabel.self, #selector(setter: UILabel.text)) - let swizzledMethod = class_getInstanceMethod(UILabel.self, #selector(UILabel.mySetText(_:))) - method_exchangeImplementations(originalMethod!, swizzledMethod!) - } - @objc func mySetText( _ text: String) { - - mySetText(text.localized()) - } -} - -extension UIButton { - - /// 实现国际化 - static func initLocalized() { - - let originalMethod = class_getInstanceMethod(UIButton.self, #selector(UIButton.setTitle(_:for:))) - let changedmethod = class_getInstanceMethod(UIButton.self, #selector(mySetTitle(_:for:))) - method_exchangeImplementations(originalMethod!, changedmethod!) - } - @objc func mySetTitle(_ text: String, for state: UIControl.State) { - - mySetTitle(text.localized(), for: state) - } -} - -extension UITextField { - - /// 实现国际化 - static func initLocalized() { - - let originalMethod = class_getInstanceMethod(UITextField.self, #selector(setter: UITextField.text)) - let changedmethod = class_getInstanceMethod(UITextField.self, #selector(mySetText(_:))) - method_exchangeImplementations(originalMethod!, changedmethod!) - } - @objc func mySetText( _ text: String) { - - mySetText(text.localized()) - } -} - -extension UITextView { - - /// 实现国际化 - static func initLocalized() { - - let originalMethod = class_getInstanceMethod(UITextField.self, #selector(setter: UITextField.text)) - let changedmethod = class_getInstanceMethod(UITextField.self, #selector(mySetText(_:))) - method_exchangeImplementations(originalMethod!, changedmethod!) - } - @objc func mySetText( _ text: String) { - - mySetText(text.localized()) - } -} - - diff --git a/ExtensionTool/ExtensionTool/ExtensionTool/NotificationCenter+Ext.swift b/ExtensionTool/ExtensionTool/ExtensionTool/NotificationCenter+Ext.swift index 7f68d82..da2be17 100644 --- a/ExtensionTool/ExtensionTool/ExtensionTool/NotificationCenter+Ext.swift +++ b/ExtensionTool/ExtensionTool/ExtensionTool/NotificationCenter+Ext.swift @@ -11,6 +11,7 @@ import UIKit enum NotificationName: String { case loginSuccess, loginFail, loginError + case userLanguageChanged } private var kNotificationActionKey: Int = 0 diff --git a/ExtensionTool/ExtensionTool/ExtensionTool/UIBarButtonItem+Ext.swift b/ExtensionTool/ExtensionTool/ExtensionTool/UIBarButtonItem+Ext.swift index 60eac96..044ead8 100644 --- a/ExtensionTool/ExtensionTool/ExtensionTool/UIBarButtonItem+Ext.swift +++ b/ExtensionTool/ExtensionTool/ExtensionTool/UIBarButtonItem+Ext.swift @@ -31,13 +31,15 @@ extension UIViewController { objc_setAssociatedObject(self, &kUIViewControllerRightTitleKey, block, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - self.navigationItem.rightBarButtonItem = UIBarButtonItem.init(title: title, style: style, target: self, action: #selector(k_rightItemAction)) + self.k_navigationItem?.rightBarButtonItem = nil + self.k_navigationItem?.rightBarButtonItem = UIBarButtonItem.init(title: title, style: style, target: self, action: #selector(k_rightItemAction)) } else { objc_setAssociatedObject(self, &kUIViewControllerLeftTitleKey, block, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - self.navigationItem.leftBarButtonItem = UIBarButtonItem.init(title: title, style: style, target: self, action: #selector(k_leftItemAction)) + self.k_navigationItem?.leftBarButtonItem = nil + self.k_navigationItem?.leftBarButtonItem = UIBarButtonItem.init(title: title, style: style, target: self, action: #selector(k_leftItemAction)) } } @@ -71,13 +73,12 @@ extension UIViewController { if position == .right { objc_setAssociatedObject(self, &kUIViewControllerRightImageKey, block, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - self.navigationItem.rightBarButtonItem = UIBarButtonItem.init(image: image, style: style, target: self, action: #selector(k_rightImgItemAction)) + self.k_navigationItem?.rightBarButtonItem = UIBarButtonItem.init(image: image, style: style, target: self, action: #selector(k_rightImgItemAction)) } else { objc_setAssociatedObject(self, &kUIViewControllerLeftImageKey, block, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - - self.navigationItem.rightBarButtonItem = UIBarButtonItem.init(image: image, style: style, target: self, action: #selector(k_leftImgItemAction)) + self.k_navigationItem?.rightBarButtonItem = UIBarButtonItem.init(image: image, style: style, target: self, action: #selector(k_leftImgItemAction)) } } diff --git a/ExtensionTool/ExtensionTool/ExtensionTool/UITextView+Ext.swift b/ExtensionTool/ExtensionTool/ExtensionTool/UITextView+Ext.swift index b67a1ed..03339d9 100644 --- a/ExtensionTool/ExtensionTool/ExtensionTool/UITextView+Ext.swift +++ b/ExtensionTool/ExtensionTool/ExtensionTool/UITextView+Ext.swift @@ -51,17 +51,17 @@ extension UITextView { } /// 占位文字 - var k_placeholder: String? { + @objc var k_placeholder: String? { set { + objc_setAssociatedObject(self, &k_TextViewPlaceholderKey, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) if newValue == nil { // 删除 self.viewWithTag(101)?.isHidden = true return } - objc_setAssociatedObject(self, &k_TextViewPlaceholderKey, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) if let placeholder = self.viewWithTag(101) as? UITextView { placeholder.isHidden = !(self.text ?? "").isEmpty diff --git a/ExtensionTool/ExtensionTool/Main1.storyboard b/ExtensionTool/ExtensionTool/Main1.storyboard index 3e279f9..dc516ae 100644 --- a/ExtensionTool/ExtensionTool/Main1.storyboard +++ b/ExtensionTool/ExtensionTool/Main1.storyboard @@ -1,6 +1,10 @@ + + + + @@ -11,12 +15,15 @@ - + - - - - - - - - - - - - - - - - diff --git a/ExtensionTool/ExtensionTool/SecondViewController.swift b/ExtensionTool/ExtensionTool/SecondViewController.swift index b8b226a..7f1626d 100644 --- a/ExtensionTool/ExtensionTool/SecondViewController.swift +++ b/ExtensionTool/ExtensionTool/SecondViewController.swift @@ -13,7 +13,7 @@ class SecondViewController: BaseViewController { override func viewDidLoad() { super.viewDidLoad() - + self.title_locailedStr = "第二个" } override func touchesBegan(_ touches: Set, with event: UIEvent?) { diff --git a/ExtensionTool/ExtensionTool/ViewController.swift b/ExtensionTool/ExtensionTool/ViewController.swift index 7cdb873..62e38ab 100644 --- a/ExtensionTool/ExtensionTool/ViewController.swift +++ b/ExtensionTool/ExtensionTool/ViewController.swift @@ -9,6 +9,14 @@ import UIKit class BaseViewController: UIViewController { + + var title_locailedStr: String? { + willSet { + + self.k_title = newValue?.localiedStr + } + } + override func viewDidLoad() { super.viewDidLoad() @@ -20,11 +28,29 @@ class BaseViewController: UIViewController { self.view.backgroundColor = UIColor.k_colorWith(rgb: 216.0) self.k_setupMyNavBar() + + self.k_navigationItem(title: "切换") { + + LanguageTool.setUserLanguage(LanguageTool.currentLanguage == .ch ? LanguageType.en : LanguageType.ch) + } + + self.k_addObserver(name: .userLanguageChanged) { [weak self] (note) in + + self?.title_locailedStr = self?.k_title + + self?.k_navigationItem(title: "切换") { + + LanguageTool.setUserLanguage(LanguageTool.currentLanguage == .ch ? LanguageType.en : LanguageType.ch) + } + } + } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } deinit { + + self.k_removeObserver(name: .userLanguageChanged) debugPrint("###\(self)销毁了###\n") } } @@ -34,6 +60,7 @@ class ViewController: BaseViewController { override func viewDidLoad() { super.viewDidLoad() + self.title_locailedStr = "首页" } var str: String = "" diff --git a/ExtensionTool/en.lproj/Localizable.strings b/ExtensionTool/en.lproj/Localizable.strings index 81b74b4..6f46aa5 100644 --- a/ExtensionTool/en.lproj/Localizable.strings +++ b/ExtensionTool/en.lproj/Localizable.strings @@ -6,4 +6,20 @@ Copyright © 2018年 ZCC. All rights reserved. */ -"登录" = "Login"; +"k首页" = "Home"; +"kHome" = "Home"; + +"k第二个" = "Second"; +"kSecond" = "Second"; + +"k登录" = "Login"; +"kLogin" = "Login"; + +"k注册" = "Register"; +"kRegister" = "Register"; + +"k点我" = "Click Me"; +"kClick Me" = "Click Me"; + +"k切换" = "ChangeLanguage"; +"kChangeLanguage" = "ChangeLanguage"; diff --git a/ExtensionTool/zh-Hans.lproj/Localizable.strings b/ExtensionTool/zh-Hans.lproj/Localizable.strings index e09cbb7..d3aed3d 100644 --- a/ExtensionTool/zh-Hans.lproj/Localizable.strings +++ b/ExtensionTool/zh-Hans.lproj/Localizable.strings @@ -6,4 +6,20 @@ Copyright © 2018年 ZCC. All rights reserved. */ -"登录" = "登录"; +"k首页" = "首页"; +"kHome" = "首页"; + +"k第二个" = "第二个"; +"kSecond" = "第二个"; + +"k登录" = "登录"; +"kLogin" = "登录"; + +"k注册" = "注册"; +"kRegister" = "注册"; + +"k点我" = "点我"; +"kClick Me" = "点我"; + +"k切换" = "切换"; +"kChangeLanguage" = "切换"; From 43b0f38fa2d388e4b910e38493d9c66b7ca0d5b4 Mon Sep 17 00:00:00 2001 From: ZCC Date: Mon, 15 Oct 2018 17:08:46 +0800 Subject: [PATCH 08/11] =?UTF-8?q?=E5=AF=BC=E8=88=AA=E6=A0=8F=E6=B8=90?= =?UTF-8?q?=E5=8F=98=E6=95=88=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UINavBarTool/MyNavigationBar.swift | 2 - .../ExtensionTool/ExtensionTool.swift | 5 ++- .../ExtensionTool/UIImage+Ext.swift | 20 +++++++++ .../ExtensionTool/UIViewController+Ext.swift | 18 +++++++- .../ExtensionTool/SecondViewController.swift | 45 ++++++++++++++++++- 5 files changed, 84 insertions(+), 6 deletions(-) diff --git a/ExtensionTool/ExtensionTool/BaseViewTool/UINavBarTool/MyNavigationBar.swift b/ExtensionTool/ExtensionTool/BaseViewTool/UINavBarTool/MyNavigationBar.swift index 8aff465..8600170 100644 --- a/ExtensionTool/ExtensionTool/BaseViewTool/UINavBarTool/MyNavigationBar.swift +++ b/ExtensionTool/ExtensionTool/BaseViewTool/UINavBarTool/MyNavigationBar.swift @@ -65,7 +65,6 @@ extension UIViewController: UIGestureRecognizerDelegate { guard let navController = self.navigationController else { return } // 隐藏系统的 - navController.navigationBar.isTranslucent = false navController.navigationBar.isHidden = true // 创建自己的 let navBar = MyNavigationBar.init() @@ -75,7 +74,6 @@ extension UIViewController: UIGestureRecognizerDelegate { let height: CGFloat = kVersion < 10.0 ? (64.0) : (44.0) navBar.frame = CGRect(x: 0, y: y, width: size.width, height: height) - self.view.clipsToBounds = true self.view.addSubview(navBar) navBar.barTintColor = UIColor.k_colorWith(r: 30.0, g: 59.0, b: 145.0, alpha: 1.0) diff --git a/ExtensionTool/ExtensionTool/ExtensionTool/ExtensionTool.swift b/ExtensionTool/ExtensionTool/ExtensionTool/ExtensionTool.swift index 3226600..7a974d8 100644 --- a/ExtensionTool/ExtensionTool/ExtensionTool/ExtensionTool.swift +++ b/ExtensionTool/ExtensionTool/ExtensionTool/ExtensionTool.swift @@ -23,10 +23,13 @@ let kTabBarHeight: CGFloat = kIsIphoneX ? (49.0 + 34.0) : (49.0) let kNavBarHeight: CGFloat = kIsIphoneX ? (64.0 + 20.0) : (64.0) /// 底部不可控区域 let kBottomSpace: CGFloat = kIsIphoneX ? (34.0) : (0.0) +/// 顶部不可控区域 +let kTopSpace: CGFloat = kIsIphoneX ? (44.0) : (0.0) /// 屏幕宽 let kWidth: CGFloat = UIScreen.main.bounds.size.width /// 屏幕高 let kHeight: CGFloat = UIScreen.main.bounds.size.height /// 系统版本 -let kVersion: CGFloat = UIDevice.current.systemVersion.k_toCGFloat() +let kVersion: Double = Double(UIDevice.current.systemVersion.components(separatedBy: ".").first ?? "0") ?? 0.0 + diff --git a/ExtensionTool/ExtensionTool/ExtensionTool/UIImage+Ext.swift b/ExtensionTool/ExtensionTool/ExtensionTool/UIImage+Ext.swift index 8a86213..960d107 100644 --- a/ExtensionTool/ExtensionTool/ExtensionTool/UIImage+Ext.swift +++ b/ExtensionTool/ExtensionTool/ExtensionTool/UIImage+Ext.swift @@ -29,6 +29,26 @@ enum PlaceholderImg: String { extension UIImage { + /// 根据颜色创建一个图片 + /// + /// - Parameter color: 颜色 + /// - Returns: 图片 + static func k_imageWithColor(_ color: UIColor) -> UIImage? { + + let rect = CGRect(x: 0.0, y: 0.0, width: 1.0, height: 1.0) + UIGraphicsBeginImageContext(rect.size) + + let ref = UIGraphicsGetCurrentContext() + ref?.setFillColor(color.cgColor) + ref?.fill(rect) + + let img = UIGraphicsGetImageFromCurrentImageContext() + + UIGraphicsEndImageContext() + + return img + } + static func k_init(type: PlaceholderImg) -> UIImage? { return type.k_toImage diff --git a/ExtensionTool/ExtensionTool/ExtensionTool/UIViewController+Ext.swift b/ExtensionTool/ExtensionTool/ExtensionTool/UIViewController+Ext.swift index 77ba594..2d39b4d 100644 --- a/ExtensionTool/ExtensionTool/ExtensionTool/UIViewController+Ext.swift +++ b/ExtensionTool/ExtensionTool/ExtensionTool/UIViewController+Ext.swift @@ -10,10 +10,22 @@ import UIKit extension UIViewController { + /// 设置导航栏透明度 + /// + /// - Parameter alpha: 0.0~1.0 + func k_setNavBarAlpha(_ alpha: CGFloat) { + + let color = UIColor.k_colorWith(r: 30.0, g: 59.0, b: 145.0, alpha: alpha) + self.k_navigationBar?.isTranslucent = true + self.k_navigationBar?.setBackgroundImage(UIImage.k_imageWithColor(color), for: UIBarMetrics.default) + self.k_navigationBar?.shadowImage = UIImage() + } + /// 设置导航栏透明 func k_setNavBarTranslucent() { - let navBar = self.navigationController?.navigationBar +// let navBar = self.navigationController?.navigationBar + let navBar = self.k_navigationBar navBar?.isTranslucent = true navBar?.setBackgroundImage(UIImage(), for: UIBarMetrics.default) navBar?.shadowImage = UIImage() @@ -22,7 +34,9 @@ extension UIViewController { /// 恢复导航栏透明 func k_resetNavBarTranslucent() { - let navBar = self.navigationController?.navigationBar +// let navBar = self.navigationController?.navigationBar + + let navBar = self.k_navigationBar navBar?.isTranslucent = false navBar?.setBackgroundImage(nil, for: UIBarMetrics.default) navBar?.shadowImage = nil diff --git a/ExtensionTool/ExtensionTool/SecondViewController.swift b/ExtensionTool/ExtensionTool/SecondViewController.swift index 7f1626d..7df93dd 100644 --- a/ExtensionTool/ExtensionTool/SecondViewController.swift +++ b/ExtensionTool/ExtensionTool/SecondViewController.swift @@ -14,6 +14,7 @@ class SecondViewController: BaseViewController { super.viewDidLoad() self.title_locailedStr = "第二个" + self.view.insertSubview(self.tableView, belowSubview: self.k_navigationBar!) } override func touchesBegan(_ touches: Set, with event: UIEvent?) { @@ -24,6 +25,48 @@ class SecondViewController: BaseViewController { super.didReceiveMemoryWarning() } - + + lazy var tableView: UITableView = { + let tableView = UITableView.init(frame: CGRect.init(x: 0.0, y: -kTopSpace, width: self.view.bounds.width, height: self.view.bounds.height)) + tableView.tableFooterView = UIView() + + tableView.delegate = self + tableView.dataSource = self + tableView.tableHeaderView = self.headView + + return tableView + }() + + lazy var headView: UIView = { + let view = UIView(frame: CGRect(x: 0.0, y: 0.0, width: kWidth, height: 200.0)) + view.backgroundColor = UIColor.red + + return view + }() } +extension SecondViewController: UITableViewDelegate, UITableViewDataSource { + + func scrollViewDidScroll(_ scrollView: UIScrollView) { + + let offsetY = scrollView.contentOffset.y + let alpha = min(1.0, max(0.0, (offsetY) / kNavBarHeight)) + self.k_setNavBarAlpha(alpha) + } + + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + + self.navigationController?.pushViewController(BaseViewController(), animated: true) + + } + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + + return 100 + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + + return UITableViewCell() + } +} From c46a8f235f2db71f3584285952d641c4e75f19ab Mon Sep 17 00:00:00 2001 From: ZCC Date: Tue, 16 Oct 2018 08:49:22 +0800 Subject: [PATCH 09/11] =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89tabBar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ExtensionTool.xcodeproj/project.pbxproj | 12 ++ ExtensionTool/ExtensionTool/AppDelegate.swift | 24 +++- .../Assets.xcassets/TabBar/Contents.json | 6 + .../events_normal.imageset/Contents.json | 22 ++++ .../events_normal@2x.png | Bin 0 -> 1470 bytes .../events_normal@3x.png | Bin 0 -> 1689 bytes .../events_selected.imageset/Contents.json | 22 ++++ .../events_selected@2x.png | Bin 0 -> 1577 bytes .../events_selected@3x.png | Bin 0 -> 2113 bytes .../TabBar/home_normal.imageset/Contents.json | 22 ++++ .../home_normal.imageset/home_normal@2x.png | Bin 0 -> 1720 bytes .../home_normal.imageset/home_normal@3x.png | Bin 0 -> 2119 bytes .../home_selected.imageset/Contents.json | 22 ++++ .../home_selected@2x.png | Bin 0 -> 1381 bytes .../home_selected@3x.png | Bin 0 -> 1599 bytes .../Contents.json | 22 ++++ .../nationTeam_selected@2x.png | Bin 0 -> 1445 bytes .../nationTeam_selected@3x.png | Bin 0 -> 1871 bytes .../nationteam_normal.imageset/Contents.json | 22 ++++ .../nationteam_normal@2x.png | Bin 0 -> 1489 bytes .../nationteam_normal@3x.png | Bin 0 -> 1767 bytes .../MyTabBarVC/MyTabBarController.swift | 107 ++++++++++++++++++ ExtensionTool/en.lproj/Localizable.strings | 3 + .../zh-Hans.lproj/Localizable.strings | 3 + 24 files changed, 284 insertions(+), 3 deletions(-) create mode 100644 ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/Contents.json create mode 100644 ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/events_normal.imageset/Contents.json create mode 100644 ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/events_normal.imageset/events_normal@2x.png create mode 100644 ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/events_normal.imageset/events_normal@3x.png create mode 100644 ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/events_selected.imageset/Contents.json create mode 100644 ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/events_selected.imageset/events_selected@2x.png create mode 100644 ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/events_selected.imageset/events_selected@3x.png create mode 100644 ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/home_normal.imageset/Contents.json create mode 100644 ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/home_normal.imageset/home_normal@2x.png create mode 100644 ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/home_normal.imageset/home_normal@3x.png create mode 100644 ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/home_selected.imageset/Contents.json create mode 100644 ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/home_selected.imageset/home_selected@2x.png create mode 100644 ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/home_selected.imageset/home_selected@3x.png create mode 100644 ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/nationTeam_selected.imageset/Contents.json create mode 100644 ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/nationTeam_selected.imageset/nationTeam_selected@2x.png create mode 100644 ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/nationTeam_selected.imageset/nationTeam_selected@3x.png create mode 100644 ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/nationteam_normal.imageset/Contents.json create mode 100644 ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/nationteam_normal.imageset/nationteam_normal@2x.png create mode 100644 ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/nationteam_normal.imageset/nationteam_normal@3x.png create mode 100644 ExtensionTool/ExtensionTool/BaseViewTool/MyTabBarVC/MyTabBarController.swift diff --git a/ExtensionTool/ExtensionTool.xcodeproj/project.pbxproj b/ExtensionTool/ExtensionTool.xcodeproj/project.pbxproj index d09f732..a61211d 100644 --- a/ExtensionTool/ExtensionTool.xcodeproj/project.pbxproj +++ b/ExtensionTool/ExtensionTool.xcodeproj/project.pbxproj @@ -48,6 +48,7 @@ F085C48A21096E6F00CB0D2B /* CalendarView.xib in Resources */ = {isa = PBXBuildFile; fileRef = F085C48921096E6F00CB0D2B /* CalendarView.xib */; }; F091FBC8212BC47D00F347C3 /* NotificationCenter+Ext.swift in Sources */ = {isa = PBXBuildFile; fileRef = F091FBC7212BC47D00F347C3 /* NotificationCenter+Ext.swift */; }; F0963FB02159D1FC00C1EE5E /* AlertTool.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0963FAF2159D1FC00C1EE5E /* AlertTool.swift */; }; + F09CEDF2217493C40065438E /* MyTabBarController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F09CEDF1217493C40065438E /* MyTabBarController.swift */; }; F0A301A9216C437E00D71D58 /* HUDTool.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0A301A8216C437E00D71D58 /* HUDTool.swift */; }; F0A301CE216CAFA600D71D58 /* Main1.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F0A301CD216CAFA600D71D58 /* Main1.storyboard */; }; F0B5D59C20FED64F00F642B1 /* AuthorityTool.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0B5D58520FED64F00F642B1 /* AuthorityTool.swift */; }; @@ -125,6 +126,7 @@ F085C48921096E6F00CB0D2B /* CalendarView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CalendarView.xib; sourceTree = ""; }; F091FBC7212BC47D00F347C3 /* NotificationCenter+Ext.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NotificationCenter+Ext.swift"; sourceTree = ""; }; F0963FAF2159D1FC00C1EE5E /* AlertTool.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlertTool.swift; sourceTree = ""; }; + F09CEDF1217493C40065438E /* MyTabBarController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyTabBarController.swift; sourceTree = ""; }; F0A301A8216C437E00D71D58 /* HUDTool.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HUDTool.swift; sourceTree = ""; }; F0A301CD216CAFA600D71D58 /* Main1.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main1.storyboard; sourceTree = ""; }; F0B5D58520FED64F00F642B1 /* AuthorityTool.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AuthorityTool.swift; sourceTree = ""; }; @@ -290,9 +292,18 @@ path = PickerTool; sourceTree = ""; }; + F09CEDF0217493A90065438E /* MyTabBarVC */ = { + isa = PBXGroup; + children = ( + F09CEDF1217493C40065438E /* MyTabBarController.swift */, + ); + path = MyTabBarVC; + sourceTree = ""; + }; F0B5D58420FED64F00F642B1 /* BaseViewTool */ = { isa = PBXGroup; children = ( + F09CEDF0217493A90065438E /* MyTabBarVC */, F016906F2107231300E0C60A /* ADScrollView */, F0B5D58520FED64F00F642B1 /* AuthorityTool.swift */, F01EC3F721083FC000AE2D11 /* BarrageView.swift */, @@ -480,6 +491,7 @@ F0B5D5A820FED64F00F642B1 /* UIIImageView+Ext.swift in Sources */, F077773720F2FC39003D7BD8 /* ViewController.swift in Sources */, F0105B9A210AC3DC005B8661 /* MyPageControl.swift in Sources */, + F09CEDF2217493C40065438E /* MyTabBarController.swift in Sources */, F0B5D5A620FED64F00F642B1 /* UITableView+Ext.swift in Sources */, F0B5D59C20FED64F00F642B1 /* AuthorityTool.swift in Sources */, F02965BC2114404200EA4ADB /* InputAssistView.swift in Sources */, diff --git a/ExtensionTool/ExtensionTool/AppDelegate.swift b/ExtensionTool/ExtensionTool/AppDelegate.swift index f647b65..b5f5879 100644 --- a/ExtensionTool/ExtensionTool/AppDelegate.swift +++ b/ExtensionTool/ExtensionTool/AppDelegate.swift @@ -19,12 +19,30 @@ class AppDelegate: UIResponder, UIApplicationDelegate { window = UIWindow.init(frame: UIScreen.main.bounds) window?.makeKeyAndVisible() - let rootVC = UIStoryboard.init(name: "Main", bundle: nil).instantiateInitialViewController()! - window?.rootViewController = rootVC self.setNavigation() self.setCommonData() - LanguageTool.initUserLanguage() + + let tabBarVC = MyTabBarController.init() + + let rootVC = UIStoryboard.init(name: "Main", bundle: nil).instantiateInitialViewController()! + rootVC.title = "首页" + rootVC.tabBarItem.image = UIImage.init(named: "home_normal") + rootVC.tabBarItem.selectedImage = UIImage.init(named: "home_selected") + + let secondVC = BaseViewController() + secondVC.title = "第二个" + secondVC.tabBarItem.image = UIImage.init(named: "nationteam_normal") + secondVC.tabBarItem.selectedImage = UIImage.init(named: "nationTeam_selected") + + let thirdVC = BaseViewController() + thirdVC.title = "第三个" + thirdVC.tabBarItem.image = UIImage.init(named: "events_normal") + thirdVC.tabBarItem.selectedImage = UIImage.init(named: "events_selected") + + tabBarVC.viewControllers = [rootVC, secondVC, thirdVC] + + window?.rootViewController = tabBarVC return true } diff --git a/ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/Contents.json b/ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/events_normal.imageset/Contents.json b/ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/events_normal.imageset/Contents.json new file mode 100644 index 0000000..35dba9f --- /dev/null +++ b/ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/events_normal.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "events_normal@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "events_normal@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/events_normal.imageset/events_normal@2x.png b/ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/events_normal.imageset/events_normal@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..dc7fc855881ebe6518b45d5560286d33eac8dcc1 GIT binary patch literal 1470 zcmeAS@N?(olHy`uVBq!ia0vp^T0pG8!3HE#B3{`7DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg49seoArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XQrEMXl$WiZmDNz zYH49)qN8ABU}&aqV5x6tqHADiWngJ#V5k5ENh+i#(Mch>H3D2mX`VkM*2oZxQ#zd*s+85C;f3L4>= zc`5nj#hPF}zP?tTdBr7(dC94sF1AWQQ}i-3Q>+ZkOe_qXjVv5ZjVufeT`inUEu5Xq zEG!(2j7;1toGoB_UGkGlb5rw5V0u#!dM$D41to{v0-((`JPL>n6pX&PQo%ZJIn&RQ5^fsY;61TdzxTZQgJNM3N zO>NaXCWQ+ubUjTbPIk(cnEihJKmWf`w>LlkU{k&A)_ObJ|NsA2UbFlC_W!RL$s1>A zN*{Vtw)<(3enF#^LgR|Q``N7g38!9vy|?;jgUUMX1huoCs~Dvh1fM-Db|I-@iHv!c z{F0t?n}3N~cuamGd?Tdlz~hf44=!<>^Sq*YD>LM4qxfQWK9q zGeKpiwVLNdf62e8ysZ!BUd>(5UMFaAF>-^1xW0r}!SCRpA34S!8npuLSsy zz}(&tn6FW^9`!wB>S08hgA{CtrhC z*nXDF5iEKx+fD~}UgG&6H9fG)T;QU?;y?1XO$p|&h4?m;ukegR8DFYwCGjS@ZSeBcFtd2%ktH%Zqa|{6cE~q;#*CqPs{> zXSQ5ef6;y)p`~{(OU3j%>R$UhVbD6M!iAmiSbvoU-b3@%7Z(R;+ zX1!LXE3V+(oF#vh^MZf0U)6V$jzf8DUoLWS*lC|#T>VAuP{PSTRZlxx%cGtJJR(a2 k4LF`DzV!b3U_S#hgK2M*{eHHEt3V~Hr>mdKI;Vst01AHnJdEuds`5wej$Aqf&=5HJX~B7|fED_bNY4Ir3 zQalK#QB-W}MX54HibxR#%Ns*w`u#-5Xaa}e(H*SL@U>t(Q zb4c%#iVy_@TvQDMo@AznluBm-UJ#k;39)F5ehiL&Bq} zWpZ{XFJK}TzT%MLFigb;L7h%V*3rqRIu@it5Cl?aAdTjMBRn+8N=%aEq0}s%RN%oH zsTxsX2&x2(ijo*K5#x~XOy8HFP)*4yH4|;Z8wMsxR3Md1F_tt56p8*Hs!&X!HCQP8 zA>aQL)`*i;Fc=DJ&_uNqKREefV<;7ytA-^QsurVY!ekeN<4_FM#GxvH%Qbe*3vdlb zlrmJOaU17|L~MalgGrQ9Sis|ua1}Cw$k-Gn4f5mrv-~`1EGm`H@@H}VAc*0`W$+=M zKc6nFp&8Ei4OAqY7ZWY&J4|F3f55Cb+WcbMcy% z3*yOu#>4&BVNY)14l+)stcx$E%nvJZ$E$H`Uq1i%Fn(iZ3wVCwq^@WAQM-sC4t32H zD-wj(7rkBi*9_mE&319R@NS=Z_(o>PvP&6ZT?e$sw*evj_41D1{Y)p`qSQi{hZ4i` za&45woxh?v&q(WfM&g?~SWS)h^g>NjV@iK}ndXJQY zA0K1YnnI2PONVm5(#BfLFPYRJ!C*>a)3+DK^mE%aud&;`tyi0b?x*KP|7uh7k#o-p zG~il4^UpiSGR^sxY}AHUF~7zw*iM@>kFlhCM!|+eGnIXUsqPc|hgj6WAi|te)L;ww zmCWo}(lJ=34a%zBd({3V^<`V%wmggeSg4fGd@?)r!FsEr44-<= zsr^|NkFAQobZrhj)0iUnp&Rtgjj?_7A$@WrBVRs5EJB)ur;{6eh=r!?w4B!woK0R)-{1o-PTimpY%DWpKPor^Y{Gi z%b+cL*ZKMNlFTc%Dcxq>uWDB4Uk@zM8x}c?bzkZI;lSDwJ}CpxwN)3{gMBD zXFsCjpp8RKoy~(wEu}jPN9o14!UWvRl5?F`>}=KGTi@$_CfPf}7mkd0mKBubwwUY- z0;9X`HXJ(fDE?+*n{ZdZKKE{0q@gMy&wZryq+~1&a*MkkW+A=j_DSr z1<%~X^wgl##FWaylc_cg49seoArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XQrEMXl$WiZmDNz zYH49)qN8ABU}&aqV5x6tqHADiWngJ#V5k5ENh+i#(Mch>H3D2mX`VkM*2oZxQ#zd*s+85C;f3L4>= zc`5nj#hPF}zP?tTdBr7(dC94sF1AWQQ}i-3Q>y+J+U$~Alv$RV;#QQOs{r=4RVHq? znBg=Jsy79LsAvq%lp2L+R?$>i<29xJy;_ zT+FYwuFli3%i2=1Jn3k{R*|>PYeijioYf{v)~nlITsU_o+sw2@PY$>rntSKr>6z8< zlBaO4Qj3;hynVnZfwQh%X%D;qf!j$|nV)t_#W1nE1}!|=FY|&eHerXv#ib9dEEvM3 zcx)2jO{g_oq*%bXg-zk)Mn;pa_TZL-YX5lCzpzBeHK-hq+Q5C};E6fvvdrlR0@sP= zMF>w&ad$DgmLi<`bMga&8;Xb8o~f?9b~Pw8$v)F}$Mn>|G6UDDqJ|=Qx4-AIWFt7g zHSiU1T-n@o#>T39)}@1+yjOpe>Y8Wmd$BKBpzpc9^n14pa*My5y*))*_Ph6#=f}k) z`;Q;YlkECtV7mQYXf9{hye###8y}uOac>{%;W$^f;~KTE`{EbbyjD37r>S>+Rk_~w zX=y>(NuQr@{$ond*~@jSQ~K(c z6ujPd^X1C*^V4>{pY%~Hv?!2u_j1FTr>8Ke*PY(BxoFonW0(IPEi(T?1s47(y*jz^6y@9(D{SR9+tTY$q#qb_@BG#%_K6Hu_o$|Qttf& zydOB`Jgv3K|NLX`oL(RoGx_kos719aRb9U@#eAHklQW0= vzWHf}zLU~DN8|KL4HzdqxalNY$7#T@O=s?3=ik?3L4~)ctDnm{r-UW|e%xIF literal 0 HcmV?d00001 diff --git a/ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/events_selected.imageset/events_selected@3x.png b/ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/events_selected.imageset/events_selected@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..2442bb50265d569557a4ef7ae93cd1c05c114501 GIT binary patch literal 2113 zcmaJ?X;f2Z8cr=D0%FTr5%3y>VoMSdmXH9ZkPr-uAVi4JQbTeB0g@Y%&?JCiq%aUU zmKH_JB9tm_wFpv`DvLrC6a^6mMG%IRMTaFUI)H3*W5LdkVeUQme&73@_j%s!Ipl6Il=s&D8jyr91(QMj+ftQUQ|{2a16xFq+HvK&o%mBLObk z0~zKV;1D1ngE8E_NkT9rX&;@H6vra4k)%CS`?5@<7Ij#R4J*BaukZ5=S&7jK*LI1OmnZhr!`cum?&cA#i6K!8 zBml@{P1o>%T^N_oh9sih?=S%YL>gZtX7X7ejpBiXSg=_Kr9iAi9>^E3VcCCS3F~4ta^MNz$P`e>{RU)Hg%A&TS2mHm zel9NS@~vXo>*s=B7mI^B}oz3BTb^bE4piySMxl(Xk$#LC7$NP|^-VxM&C z9E}=v?kb2H3y7!~>UvNHMoT#E(Zl{0pT=)<;SAh(aXh7g(|vkuR)Vf~oNwk#rB%|%5Z`hUbVO!qV)1lx$tX*?p#(DY4?Eo;B-TJU6-vYRZ-j4XJvEm z>`&@kRcnFeJ>Q#|zr9Ad8poPW1H`ky}qGVI_sn1S*TUl>(5x?mNLbCR&(x;`<$s4Bpw(ehy z(v4NcN$(eoZVAhwB z_*#c9ay((8b?nq5WU^eJvtyh%gd1z=Z~R?$>!hkf)xCdey275?!g&>M^ZQL&n&X+q zinm+u9Ln)I)8JH!lQA;nXWNe5{)%z=+T019p>Jlh=qtUUNekywF9?40I*hnfHhu2U z7?+$R{iqB|y^z?t{c57e*N@Eb{Xr3S4|`^UELjXPW^1TMUAbLYm>G7d=9ujImf1TNHFvY`gGo zTeY5_U8IH2{Efor>4$$#8|kgyn4DtB!N1vxDgIk~_Xl|f{N=^krDY3WQe?)`{H~&& z)Xx05WXH*_E<3FUf+p$@@=^PThsWh|x6V#uQmxj)6Ro2mVT<1d7P_4|IH;!e_k>=& zKh+NeRy959E7r99;UORn+Oi-KM8%IfL!TIW?aiz++0+o%Q)Q_lD zgtc9jIw|q1Z&*)X*B>rVbr$|UM{RxjYqyf6l~cW~%F08%gVJmn@w%=c=UnkeHcIVJ z{&jz*JZrGgSANgR;NT={yjGQ9ee-k16y6DM6*y0MJvn8vBWkky#e^?mhsl+hMtvI< z$y7ZvFw~>muG2b+tK1uAy1Y;wHlh<0{8)Nv%wWnW4STIcr&axaINYA}Z z2wZg@Q)UQk>Io-g2wCpj!ROBg2aNJ>UO$UlP;$5a+a|Z&gDr*=UpANfmG?x{ cJ|=C@N09owF_`Z==$cEN=Dm+n?sX{bKlkH|6951J literal 0 HcmV?d00001 diff --git a/ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/home_normal.imageset/Contents.json b/ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/home_normal.imageset/Contents.json new file mode 100644 index 0000000..6499320 --- /dev/null +++ b/ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/home_normal.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "home_normal@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "home_normal@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/home_normal.imageset/home_normal@2x.png b/ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/home_normal.imageset/home_normal@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..26a042962d9357209a610dc31dd8367d20cef634 GIT binary patch literal 1720 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 literal 0 HcmV?d00001 diff --git a/ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/home_selected.imageset/Contents.json b/ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/home_selected.imageset/Contents.json new file mode 100644 index 0000000..7e8c0fa --- /dev/null +++ b/ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/home_selected.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "home_selected@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "home_selected@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/home_selected.imageset/home_selected@2x.png b/ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/home_selected.imageset/home_selected@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..cb7ad3e720f5458bdf4a3b4534c5927c85016024 GIT binary patch literal 1381 zcmeAS@N?(olHy`uVBq!ia0vp^>LAR)1|)kH2buyY$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%xak-5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s0z*Q}aq-dQ%X3Eph4vC5PMspv^9+MVV!(DQ-pixe8!!TV>*Q ziy2Pypn6kqyTu%*UVWfr^g)q}6xlE#Uu zK|-q4K~sYMF?1c-<&k*#$G)#QnX~TBocn!lF95iBnV3)(7XDdeUWkI%8s7*2%>*X7nYC z9o%uhNcRDoi;T=}hG%~!y=D=woM+5BZO^pVjP5l`J1bTM3Vip8o!cHg&e@9uI4aVr_H(#m`c2&D;9vbItVi7JK*9wTgcZ(@DKw zro8>>W(j{`@go{;MJGQ7T|9ne3Ev$jgDll@C)cplERTTmdy4nmQg<}w_KR~+mfv~0 zq0=zy;G~)-J@wM{juskit_vD>T`P~W_ZGF5Z89&&T34JY6gD&O%5LV*IlVh`T2s{1 zLcO*$_;NkupVJiMc+PjOuy2!{u<_(m3abvbcv;^2&inkve~xP*f7h0o-wXSB?xt?( zF0Y*%reD{eA|zSV7#Ho#m}%0z_DRr{^DECypL$0~ literal 0 HcmV?d00001 diff --git a/ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/home_selected.imageset/home_selected@3x.png b/ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/home_selected.imageset/home_selected@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..6f5c651a7b5cce2ec0b0828f62439bc8f922624f GIT binary patch literal 1599 zcmaJ>Yfuwc6i$VTS`l00C@QjD28@qn^8k|F5-?;Fj6(n+2%@zt*#$Bo*=2W;p!Jnf zM{6Gebx;J$#78NEkNPMWh8iu_infXqMG=eDB8VOF3Ct8b-5_9plcO2Xfn4V-gm-y?)!VgQUSLFvYK=@h0JCPF`D41a59SkbQUa! zNG346DE}f6#pC&enGES{x;`E;k`@u>#fWScievM5Q86|OGnxq&$Rct~RwdZma0UcS zxDrf@(2Mnyn#eURSxXZsYZDB{wPquXgE7%SlnvnoECh=IHcOtBL2OEJNEhMu-eU*^ zh9In23BE2WU7rM~Ntys6M3F+HM5X}but*XCE2QCz0I66K35j7y5-t==5HXC1CBX0l za@lA+8%ajB!@0Of3Ffjag+NeYVWFr{CL-w^NCLw!B$h%_sgOemnIbET*@RXmWJCca z7$a?>SQBXlyoy*BS->hmuF}_6uu!A2R%WW?0&9KSD zn|l9Km@yPl1e8oLWC3mD2A3V;O+_JUn!s3+HjrfANEefGNtR@CNeWP_ys}%qT&d))2UsCN03wwGq?UwM34oH_XMyu0=j37vhS6 zyuX4@!f1P$9P*&OVxV+~0hJh-R%hk2FrzgXeqTU&*Uoo!llg_GHQ9j?CJujGd zI5>D>K|5bxI@^8F{R43hq{I({9XEi}r;7jRfPo0}sqO?Sx+(ty_llL8(}xn`?+rvc z>hve4%~>vJog}&qHrqdZxA~}FtA2)3RF~(e9Vb`)gtjo5X`gqkeCu&j=oT!qr~fnGinv{g%iHo&+MQp}4G(^b3URmym z!F2`rYAM)&)O0VUW?TkNF#g9M88of-*_jJ&l`M2vDr>v7R}=d}18xa1&23fit-bF! zEYLic-;2^$4?oSja0V@!TeP!XC&&BW)&$HKt>3*b#PO=Jtz?#SQChzIbY~kz@1B}$9R`_J-iZl%tN;vt=4 zx51)|;Q|LH<6nPr&n@=tNDP-QPyiWK?yQXRzjxS{K|Pwr>KQMc6VVG@^4{wDu)+OJ zFKr*4nhZ0M+n<$%1xfoV1cTRl_&4$UhyUW|1-!45rnXOB-6lY)k`8rfTXx3o>5crX zruIqV^E=x)q1B%4t_3~kYSyP-4GBt#BQtJdwH4h9{m>$PKLfYyn6kC6*tGx3w*xI3 zJ(oR(u-(y~2j3lgzU;{L)=c^In2^KE>hJoUmwwG}e&q`-o?EIsIAtKz%_BNDC&LQE Q3GXjmr%6DM#Ae$60TS|M+5i9m literal 0 HcmV?d00001 diff --git a/ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/nationTeam_selected.imageset/Contents.json b/ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/nationTeam_selected.imageset/Contents.json new file mode 100644 index 0000000..7fdb48b --- /dev/null +++ b/ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/nationTeam_selected.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "nationTeam_selected@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "nationTeam_selected@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/nationTeam_selected.imageset/nationTeam_selected@2x.png b/ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/nationTeam_selected.imageset/nationTeam_selected@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..6484641c7fc7fc45e5fdf4122f9a6c7d42856186 GIT binary patch literal 1445 zcmeAS@N?(olHy`uVBq!ia0vp^ia@N+!3HE7_bL_vDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg49seoArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XQrEMXl$WiZmDNz zYH49)qN8ABU}&aqV5x6tqHADiWngJ#V5k5ENh+i#(Mch>H3D2mX`VkM*2oZxQ#zd*s+85C;f3L4>= zc`5nj#hPF}zP?tTdBr7(dC94sF1AWQQ}i-3Q>>gVogLjQ%q<*Ejm!-VT`io9O$?o! zOkA8zOby&j4J=@KUGkGlb5rw5V0u#!dM$D41to{v0-((Ne*OK$cU53fKz5id>g zL#g3)y0?wq{;>Nxw`%sWbMMwnJ^cI1^0Hgy_kY^mulzpudF5I5#Wzm~+a`$ld@8ox z;3#I(EWLrB?||tKBc&Eeg+)?5O_c_`yBt|NPF6gcB=h6R+46&OJ9QlRprNH$uv3DBXh++u)Ndo zV!7TRcEMwN_Dh#r^OuTFNZgocn7lB!Qpa$Y;OCuE{F`nC>hw$9tLiMYt-LO`ZPJ=# z>8G5N`+lrH+wk?tG;fy+hfM3Mu1x#L@6>%kX$yxgnCe&&m}C1e^t$CWw$At!mXFFj zI?MR|4oKSX-&9o=vCH$}EjG6UBCk&+-6=h+wOS>DZS|TN_g^-JH+zYNmLyBBX(*ib zsaa&o`iyf%JHOT_sXW#$n3#S>{J5%R*smVl3#@ILtK>~CC`!&}n*N~U?(L2?cI7{`5!YYOLcH1^>@cvaUq1sXOC2gszi|EA9 z@6+nPzFWak>UB6vlj(`fLeodqipP6(qB}Tlepjz>-uW*09(S=#vPRkd36C4h=cUeV z>fd0zn&+;;=?7alBABET{Zyvzy}LiuUG$mO=Tx>Hsi0{Q1*wifN>IrLfn-cT$OOsJAOsK!2!><=5t50?5CSNhQiKAE z;sK?!R8}hm1i^((I9e-6t0f3Utxy!|3W{4>l}=Q&KT7AEneV-KzI(szzB5_AKI_d) ztxa(_oEhI65@MEyy`V83`&xw_zo|DUFBtVlq-eZI1>-yev~&;wnS?_OVhE@L zB^QpCc_*r1|3sevabk>^B_X=I0c>n1CybOk=Q^bmuhyol0||P+1h3vm=!TQduCC2E2QSSTvPH z3JM{wcd@V?hZv2bN{~W{kB=wEJCPAp6otlOu_#nJg-&t3RI+ZRH$ud7$8_J zR>_p83{e1jMo}aZhjNHmrf*A-E8o*9)bHAaHH@MaDJe8ERbSGKqd@Tgu5$T%Z#61} zKjizL#Oig6C;Vv!+OCDXtXFBKvO-jof>X3xcCR=#&w$?Unf z&WfdA$x!se{nxN(jxYu3m+z&EZQhF?R$z)(VbWgIRAGbNm<~SV5uhEqe>ilLZk@%2 zst07=X5FdO#jPHf7a~~$ipGfK)`SX8SVkTh=RH|)(v*}2CudhXOr{=@o~^rl`c}xRbvZVofD3o7m!VySVL2*R zvUONRY8d|LwF_#qE0<0Co&d~wm4_nDdd&+Rwn#b%m5)h={1CF2)wpk4PR1(}m9xyJ z#YTL9-F)ehaAbmQ>;9uIt0AyKe554v7+d6)kuM8zFR5JLHS)Bi$c>(N_W|V0{A-G{ zaQI5!F2d-gzV^%#hi8GKc-fL;J#+7dtO{jcHQtFAGh)9i^bftc#=1HQWR7Lzea>I5 zX^Yk5FjvdRQ);aUUb_h*Xvu$>ml4E?@>Ns(KkbeUbl?19dd}5?h_cWs(%xnJdq+xd z*<~C)&`n9YsM)c(SckFs@b=^j)h%T&>HYH!3q13$^zmECafS~2y+(t)6t=$h&6C@&&O>kOWF78f40t8^(?L^T)5~=^~;b_C@THV)v8?E)!n1t z1rCOliXWzDmSh`)NyWxHshX9aR)pI(fk)4q`CoFlT{xJX6JFmNQN^_^GOH_y7%l#N zqGF}Es|QHAw{e%%A(l~jSDa_H zp@p+pD&q<44=a`)9cdiNyM01luv-T`?mp+ud?e6hckaj4fvq$+* z*LQGBiO%!FkQ?J<2sBC8t>{k-6fEf*+d$u&UszGAbli8l`_fn<{PicDUe<(xgVWCj ziiTda-#BG?bWV0FzCDVBiC{C6S7>+tM6>yw>Wgbr8^g$FR*Z)ACyG`Vl^$#<5H8E@ zSfEHt;@ggFBX-%>K8fy%-fl)a7roM_Do}I67J|0aEcL6m65034r}yIK;mFMsf^J*4 Qh5BC{pXUSBdTves2f>%<>;M1& literal 0 HcmV?d00001 diff --git a/ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/nationteam_normal.imageset/Contents.json b/ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/nationteam_normal.imageset/Contents.json new file mode 100644 index 0000000..f15f0a4 --- /dev/null +++ b/ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/nationteam_normal.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "nationteam_normal@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "nationteam_normal@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/nationteam_normal.imageset/nationteam_normal@2x.png b/ExtensionTool/ExtensionTool/Assets.xcassets/TabBar/nationteam_normal.imageset/nationteam_normal@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..886eb6ab4dae53872152d0de3a04ffb91d2fc22e GIT binary patch literal 1489 zcmeAS@N?(olHy`uVBq!ia0vp^ia@N+!3HE7_bL_vDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg49seoArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XQrEMXl$WiZmDNz zYH49)qN8ABU}&aqV5x6tqHADiWngJ#V5k5ENh+i#(Mch>H3D2mX`VkM*2oZxQ#zd*s+85C;f3L4>= zc`5nj#hPF}zP?tTdBr7(dC94sF1AWQQ}i-3Q>>gUTpZ1ujV&Bajm!-VT`eqKO`Kef zot@mwoQ;f3&5U7sUGkGlb5rw5V0u#!dM$D41to{v0-((*gSk3)*ius%Tkw6v0>*;6e_SPMjwK>eX zXO_=|mSnYQip^H*KkRDRyyN-idex{6{8!h_^sr*Ob7^@^^Y$67S65tQ{GQNfx-a(K zV>LGeY3Yq(ug|hPVcYH06M4J8K!RCue$B>d?4tq;RskN&q!^D z0|CIyQz41QqD7%>8H!M(Mhr!VsBks_1g_Vqq_Sif1LNUDg_1*j+R#J<6><(S%1=ZS zsd#XbA~;hGZ_X4;WSPk_mYleL9T=!%;{phbNkJWwqSUZ;9O8^F8($lbsYGxFf+cf^ z?}CaJg@HU&4TF9Zf3l43%LD^h6uKXa$yl=*WYFmTR2qv)UqhzR*)$fLMh9mfBJNEs zPhdwtf>~eqjzdhsFcq6h)oQgAtuF;tCsOGw7K=(_P#Fv|jv#9?l$caUR%$%v6d+h5 zQ!7-M0#$-WMQJ>mhH;2^r0-HdRPSY#n%Oep1*7VuDk_~qGo~~L6p8*HiXiXN8Y}|- z5bu8qYa|&em>L0V&@{CSZ(M?h(UpqLQ^QgWRZCDbWv+^0NhpSDl28@M;~A?K0D4C$ zlyX$7@tNU>L~Nl_gGrS#SO{^5xC%v~kh6oBJidU-WODr&0dzW_$)wYK1^x_(Ch&!V zAR2Ry3!$qX;;YHd`@&EdKNA&2r`Q#}Y6v zmx>2NH8%Gj&7M2LC&;*bKf3tl{qVy|eB#ykXfH0_-GkqlC?Uj^==z7twgwZzU0SbS z@bM&<#Vp;UxUqfIylMe2oPZu{;e8+GawQV$S${I$QE@saeXI$+jb9N2b)PJ;$^+wYDt7jI2 z=GqC|{H@FIHf7S0el_tkPQAsGF;exe0Q-#b+?Z`N8l?ufap9aqCK~a#Kl1CMuhwMzha9&q0#^ zA`)Yt<(5F!UOCMzK85!oroDKNxq>=viy+fwU zi_^U;yhkF>@VS?k*Al)0I+`VVv@i1H5zCO+*S%ZXCch{c{JGWCePg46qz)R2+3V64 zRXkaoQbibFa4nDKwYz4(NoPkPA-Sc_$R+L7kxgR50c8#ORgVF#88&Is->)y&AFyNL zT?;#(+HdaUt))<2Z?CO+L0d$6P}=SOr)Fv@w6J08$(<*-on{A$(p%m_?S|S4@BHl# zt@I3@H2U<-&s8Rk{(X@N)eBg{@KsDKGJE&Z{w0S)pY^4eFZXlOi;Hdz8A^!72IONl zmzViA>rsXV;TP>I;%zJG+f+nJ9Eo37a(9z~v88p#tqPiB19gRYTMML4DC<6Z-lk?% zX#Ci@QNe4;kou>qSB9M;+eFVOsdiZ(DtQBiFhg{Yd)hgV%Bsv@X<6c%y|=+!HVxG?75HDMJCxl;=QV|p#^Q};iu_Y5z(93H;mMfJs=?z}NKW=OdE z$~rqi@P=&hz6n*~lIhBjFROg4dnPJB3A|FSr?Ll6|02HQ_Qo*|*b!EBnI~U_|C9hg M$QMJWg5t9O2D=rgp8x;= literal 0 HcmV?d00001 diff --git a/ExtensionTool/ExtensionTool/BaseViewTool/MyTabBarVC/MyTabBarController.swift b/ExtensionTool/ExtensionTool/BaseViewTool/MyTabBarVC/MyTabBarController.swift new file mode 100644 index 0000000..b8749ee --- /dev/null +++ b/ExtensionTool/ExtensionTool/BaseViewTool/MyTabBarVC/MyTabBarController.swift @@ -0,0 +1,107 @@ +// +// MyTabBarController.swift +// ExtensionTool +// +// Created by 张崇超 on 2018/10/15. +// Copyright © 2018 ZCC. All rights reserved. +// + +import UIKit + +class MyTabBarController: UITabBarController { + + /// 所有的按钮 + private var allBtns: [UIButton] = [] + /// 按钮宽度 + private var tabBarW: CGFloat! + + override func viewDidLoad() { + super.viewDidLoad() + } + + override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + + // 移除系统自带的按钮 + for subView in self.tabBar.subviews { + + if subView.isKind(of: NSClassFromString("UITabBarButton")!) { + + subView.removeFromSuperview() + } + } + } + + override var viewControllers: [UIViewController]? { + + didSet { + + self.createTabBarItems() + } + } + + /// 创建自定义按钮组 + private func createTabBarItems() { + + guard let viewControllers = self.viewControllers else { return } + let tabbarW: CGFloat = kWidth / CGFloat(viewControllers.count) + let tabbarH: CGFloat = 49.0 + self.tabBarW = tabbarW + + for (i, chiledVC) in viewControllers.enumerated() { + + let btn = UIButton.init(type: UIButton.ButtonType.custom) + btn.frame = CGRect(x: tabbarW * CGFloat(i), y: 0.0, width: tabbarW, height: tabbarH) + btn.setTitle(chiledVC.title, for: .normal) + btn.setImage(chiledVC.tabBarItem.image, for: .normal) + btn.setImage(chiledVC.tabBarItem.selectedImage, for: .disabled) + btn.setTitleColor(UIColor.darkGray, for: .normal) + btn.setTitleColor(UIColor.white, for: .disabled) + + btn.imageEdgeInsets = UIEdgeInsets(top: 0.0, left: 8.0, bottom: 0.0, right: 0.0) + btn.titleEdgeInsets = UIEdgeInsets(top: 0.0, left: 18.0, bottom: 0.0, right: 0.0) + btn.titleLabel?.font = UIFont.systemFont(ofSize: 14.0) + btn.tag = i + btn.isEnabled = !(i == self.selectedIndex) + + self.allBtns.append(btn) + self.moveIdentiferViewTo(self.selectedIndex) + + btn.k_addTarget { [unowned self] in + + for btn in self.allBtns { + btn.isEnabled = true + } + self.selectedIndex = btn.tag + btn.isEnabled = false + + self.moveIdentiferViewTo(btn.tag) + } + self.tabBar.insertSubview(btn, belowSubview: self.identifierView) + } + } + + /// 标记符移动 + private func moveIdentiferViewTo(_ index: Int) { + + for btn in self.allBtns { + btn.backgroundColor = UIColor.white + } + let btn = self.allBtns[index] + UIView.animate(withDuration: 0.25, animations: { + + btn.backgroundColor = UIColor.darkGray + self.identifierView.transform = CGAffineTransform.init(translationX: self.tabBarW * CGFloat(index), y: 0.0) + }) + } + /// 标记符 + private lazy var identifierView: UIView = { + let view = UIView(frame: CGRect(x: 0.0, y: 0.0, width: self.tabBarW, height: 2.0)) + view.backgroundColor = UIColor.red + + self.tabBar.addSubview(view) + + return view + }() + +} diff --git a/ExtensionTool/en.lproj/Localizable.strings b/ExtensionTool/en.lproj/Localizable.strings index 6f46aa5..82b9bcd 100644 --- a/ExtensionTool/en.lproj/Localizable.strings +++ b/ExtensionTool/en.lproj/Localizable.strings @@ -12,6 +12,9 @@ "k第二个" = "Second"; "kSecond" = "Second"; +"k第三个" = "Third"; +"kThird" = "Third"; + "k登录" = "Login"; "kLogin" = "Login"; diff --git a/ExtensionTool/zh-Hans.lproj/Localizable.strings b/ExtensionTool/zh-Hans.lproj/Localizable.strings index d3aed3d..044a558 100644 --- a/ExtensionTool/zh-Hans.lproj/Localizable.strings +++ b/ExtensionTool/zh-Hans.lproj/Localizable.strings @@ -12,6 +12,9 @@ "k第二个" = "第二个"; "kSecond" = "第二个"; +"k第三个" = "第三个"; +"kThird" = "第三个"; + "k登录" = "登录"; "kLogin" = "登录"; From 798437c34f429633fbc5f54588f5a89f3c4e8b71 Mon Sep 17 00:00:00 2001 From: ZCC Date: Thu, 18 Oct 2018 14:12:46 +0800 Subject: [PATCH 10/11] no message --- .../BaseViewTool/AuthorityTool.swift | 39 ++++++++++++++++--- 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/ExtensionTool/ExtensionTool/BaseViewTool/AuthorityTool.swift b/ExtensionTool/ExtensionTool/BaseViewTool/AuthorityTool.swift index 063a075..68ef2b3 100644 --- a/ExtensionTool/ExtensionTool/BaseViewTool/AuthorityTool.swift +++ b/ExtensionTool/ExtensionTool/BaseViewTool/AuthorityTool.swift @@ -39,8 +39,11 @@ extension AuthorityTool { if isOK { block?() + + } else { + + self.requestContactAuthor(block: block) } - self.requestContactAuthor() } return false @@ -103,22 +106,46 @@ extension AuthorityTool { //MARK: 请求摄像头权限 /// 请求摄像头权限 /// + /// - Parameter block: 回调 /// - Returns: true/false @discardableResult - class func requestCameraAuthor(block:(()->Void)? = nil) -> Bool { + class func requestCameraAuthor(block: (()->Void)? = nil) -> Bool { if !UIImagePickerController.isSourceTypeAvailable(.camera) { print("设备不支持摄像头") return false } - let status = AVCaptureDevice.authorizationStatus(for: AVMediaType.video) + return AuthorityTool.requestAuthor(type: .video, block: block) + } + + /// 请求麦克风权限 + /// + /// - Parameter block: 回调 + /// - Returns: true/false + @discardableResult + class func requestAudioAuthor(block: (()->Void)? = nil) -> Bool { + + return AuthorityTool.requestAuthor(type: .audio, block: block) + } + + /// 请求权限 + private class func requestAuthor(type: AVMediaType, block: (()->Void)? = nil) -> Bool { + + let status = AVCaptureDevice.authorizationStatus(for: type) if status == .notDetermined { - AVCaptureDevice.requestAccess(for: .video) { (isOK) in + AVCaptureDevice.requestAccess(for: type) { (isOK) in + + if isOK { + + block?() + + } else { + + self.requestAlbumAuthor(block: block) + } - if isOK { block?() } - self.requestCameraAuthor() } return true From 6d969eee810a58929ed63a3d717df12fed8d5869 Mon Sep 17 00:00:00 2001 From: ZCC Date: Wed, 6 Mar 2019 18:13:40 +0800 Subject: [PATCH 11/11] no message --- .../ExtensionTool.xcodeproj/project.pbxproj | 4 +- ExtensionTool/ExtensionTool/AppDelegate.swift | 22 +--------- ExtensionTool/ExtensionTool/Main1.storyboard | 20 +-------- .../ExtensionTool/ViewController.swift | 41 ++++--------------- 4 files changed, 14 insertions(+), 73 deletions(-) diff --git a/ExtensionTool/ExtensionTool.xcodeproj/project.pbxproj b/ExtensionTool/ExtensionTool.xcodeproj/project.pbxproj index a61211d..f79e295 100644 --- a/ExtensionTool/ExtensionTool.xcodeproj/project.pbxproj +++ b/ExtensionTool/ExtensionTool.xcodeproj/project.pbxproj @@ -664,7 +664,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = ExtensionTool/ExtensionTool.entitlements; CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = 8W5UTYMJE7; + DEVELOPMENT_TEAM = J6VFVU93Z9; INFOPLIST_FILE = ExtensionTool/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -685,7 +685,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = ExtensionTool/ExtensionTool.entitlements; CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = 8W5UTYMJE7; + DEVELOPMENT_TEAM = J6VFVU93Z9; INFOPLIST_FILE = ExtensionTool/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = ( diff --git a/ExtensionTool/ExtensionTool/AppDelegate.swift b/ExtensionTool/ExtensionTool/AppDelegate.swift index b5f5879..b18d4a9 100644 --- a/ExtensionTool/ExtensionTool/AppDelegate.swift +++ b/ExtensionTool/ExtensionTool/AppDelegate.swift @@ -21,28 +21,8 @@ class AppDelegate: UIResponder, UIApplicationDelegate { self.setNavigation() self.setCommonData() - LanguageTool.initUserLanguage() - let tabBarVC = MyTabBarController.init() - - let rootVC = UIStoryboard.init(name: "Main", bundle: nil).instantiateInitialViewController()! - rootVC.title = "首页" - rootVC.tabBarItem.image = UIImage.init(named: "home_normal") - rootVC.tabBarItem.selectedImage = UIImage.init(named: "home_selected") - - let secondVC = BaseViewController() - secondVC.title = "第二个" - secondVC.tabBarItem.image = UIImage.init(named: "nationteam_normal") - secondVC.tabBarItem.selectedImage = UIImage.init(named: "nationTeam_selected") - - let thirdVC = BaseViewController() - thirdVC.title = "第三个" - thirdVC.tabBarItem.image = UIImage.init(named: "events_normal") - thirdVC.tabBarItem.selectedImage = UIImage.init(named: "events_selected") - - tabBarVC.viewControllers = [rootVC, secondVC, thirdVC] - - window?.rootViewController = tabBarVC + window?.rootViewController = UIStoryboard.init(name: "Main", bundle: nil).instantiateInitialViewController()! return true } diff --git a/ExtensionTool/ExtensionTool/Main1.storyboard b/ExtensionTool/ExtensionTool/Main1.storyboard index dc516ae..624292c 100644 --- a/ExtensionTool/ExtensionTool/Main1.storyboard +++ b/ExtensionTool/ExtensionTool/Main1.storyboard @@ -1,11 +1,11 @@ - + - + @@ -17,23 +17,7 @@ - - - - - - - diff --git a/ExtensionTool/ExtensionTool/ViewController.swift b/ExtensionTool/ExtensionTool/ViewController.swift index 62e38ab..4276a77 100644 --- a/ExtensionTool/ExtensionTool/ViewController.swift +++ b/ExtensionTool/ExtensionTool/ViewController.swift @@ -20,29 +20,6 @@ class BaseViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() - /* - let backItem = UIBarButtonItem.init() - backItem.title = "" - self.navigationItem.backBarButtonItem = backItem - */ - - self.view.backgroundColor = UIColor.k_colorWith(rgb: 216.0) - self.k_setupMyNavBar() - - self.k_navigationItem(title: "切换") { - - LanguageTool.setUserLanguage(LanguageTool.currentLanguage == .ch ? LanguageType.en : LanguageType.ch) - } - - self.k_addObserver(name: .userLanguageChanged) { [weak self] (note) in - - self?.title_locailedStr = self?.k_title - - self?.k_navigationItem(title: "切换") { - - LanguageTool.setUserLanguage(LanguageTool.currentLanguage == .ch ? LanguageType.en : LanguageType.ch) - } - } } override func didReceiveMemoryWarning() { @@ -50,7 +27,6 @@ class BaseViewController: UIViewController { } deinit { - self.k_removeObserver(name: .userLanguageChanged) debugPrint("###\(self)销毁了###\n") } } @@ -59,16 +35,17 @@ class ViewController: BaseViewController { override func viewDidLoad() { super.viewDidLoad() - - self.title_locailedStr = "首页" + + } - var str: String = "" - - @IBAction func btnAction() { - - let secondVC = SecondViewController() - self.navigationController?.pushViewController(secondVC, animated: true) + override func touchesBegan(_ touches: Set, with event: UIEvent?) { + + PickerTool.showDatePicker(with: UIDatePicker.Mode.dateAndTime) { (str) in + + + } + } override func didReceiveMemoryWarning() {