From f60c2cc37311a36405832df65ae2aa5ed6b2f29f Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Mon, 12 Dec 2016 17:40:43 +0300 Subject: [PATCH 1/4] keyboard notifications handling --- LeadKit/LeadKit.xcodeproj/project.pbxproj | 60 +++++++++++++++++++ .../LeadKit/Enums/KeyboardNotification.swift | 31 ++++++++++ .../KeyboardNotificationValuesError.swift | 19 ++++++ .../Notification+UIKeyboardInfoValues.swift | 42 +++++++++++++ ...ificationCenter+RxKeyboardExtensions.swift | 54 +++++++++++++++++ .../Extensions/UIColor/UIColor+Hex.swift | 1 - ...IViewAnimationCurve+AnimationOptions.swift | 27 +++++++++ .../KeyboardDidNotificationValues.swift | 38 ++++++++++++ .../KeyboardWillNotificationValues.swift | 42 +++++++++++++ 9 files changed, 313 insertions(+), 1 deletion(-) create mode 100644 LeadKit/LeadKit/Enums/KeyboardNotification.swift create mode 100644 LeadKit/LeadKit/Enums/KeyboardNotificationValuesError.swift create mode 100644 LeadKit/LeadKit/Extensions/Notification/Notification+UIKeyboardInfoValues.swift create mode 100644 LeadKit/LeadKit/Extensions/NotificationCenter/NotificationCenter+RxKeyboardExtensions.swift create mode 100644 LeadKit/LeadKit/Extensions/UIViewAnimationCurve/UIViewAnimationCurve+AnimationOptions.swift create mode 100644 LeadKit/LeadKit/Structures/KeyboardNotificationValues/KeyboardDidNotificationValues.swift create mode 100644 LeadKit/LeadKit/Structures/KeyboardNotificationValues/KeyboardWillNotificationValues.swift diff --git a/LeadKit/LeadKit.xcodeproj/project.pbxproj b/LeadKit/LeadKit.xcodeproj/project.pbxproj index 3676e1bb..8d65a330 100644 --- a/LeadKit/LeadKit.xcodeproj/project.pbxproj +++ b/LeadKit/LeadKit.xcodeproj/project.pbxproj @@ -32,6 +32,13 @@ 788EC15A1CF64528009CFB6B /* UIStoryboard+InstantiateViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 788EC1591CF64528009CFB6B /* UIStoryboard+InstantiateViewController.swift */; }; 789CC6081DE5835600F789D3 /* CursorType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 789CC6071DE5835600F789D3 /* CursorType.swift */; }; 789CC60B1DE584F800F789D3 /* CursorType+Slice.swift in Sources */ = {isa = PBXBuildFile; fileRef = 789CC60A1DE584F800F789D3 /* CursorType+Slice.swift */; }; + 789F5A0C1DFECB71004A3694 /* UIViewAnimationCurve+AnimationOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 789F5A0B1DFECB71004A3694 /* UIViewAnimationCurve+AnimationOptions.swift */; }; + 789F5A121DFECD11004A3694 /* KeyboardDidNotificationValues.swift in Sources */ = {isa = PBXBuildFile; fileRef = 789F5A111DFECD11004A3694 /* KeyboardDidNotificationValues.swift */; }; + 789F5A141DFECD54004A3694 /* KeyboardNotificationValuesError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 789F5A131DFECD54004A3694 /* KeyboardNotificationValuesError.swift */; }; + 789F5A161DFECD82004A3694 /* KeyboardWillNotificationValues.swift in Sources */ = {isa = PBXBuildFile; fileRef = 789F5A151DFECD82004A3694 /* KeyboardWillNotificationValues.swift */; }; + 789F5A1B1DFECF2B004A3694 /* Notification+UIKeyboardInfoValues.swift in Sources */ = {isa = PBXBuildFile; fileRef = 789F5A1A1DFECF2B004A3694 /* Notification+UIKeyboardInfoValues.swift */; }; + 789F5A1E1DFECF5F004A3694 /* NotificationCenter+RxKeyboardExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 789F5A1D1DFECF5F004A3694 /* NotificationCenter+RxKeyboardExtensions.swift */; }; + 789F5A201DFECF9F004A3694 /* KeyboardNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 789F5A1F1DFECF9F004A3694 /* KeyboardNotification.swift */; }; 78A0FCC71DC366A10070B5E1 /* StoryboardProtocol+DefaultBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78A0FCC51DC366A10070B5E1 /* StoryboardProtocol+DefaultBundle.swift */; }; 78A0FCC81DC366A10070B5E1 /* StoryboardProtocol+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78A0FCC61DC366A10070B5E1 /* StoryboardProtocol+Extensions.swift */; }; 78A74EA91C6B373700FE9724 /* UIView+DefaultNibName.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78A74EA81C6B373700FE9724 /* UIView+DefaultNibName.swift */; }; @@ -100,6 +107,13 @@ 788EC1591CF64528009CFB6B /* UIStoryboard+InstantiateViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIStoryboard+InstantiateViewController.swift"; sourceTree = ""; }; 789CC6071DE5835600F789D3 /* CursorType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CursorType.swift; sourceTree = ""; }; 789CC60A1DE584F800F789D3 /* CursorType+Slice.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CursorType+Slice.swift"; sourceTree = ""; }; + 789F5A0B1DFECB71004A3694 /* UIViewAnimationCurve+AnimationOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIViewAnimationCurve+AnimationOptions.swift"; sourceTree = ""; }; + 789F5A111DFECD11004A3694 /* KeyboardDidNotificationValues.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyboardDidNotificationValues.swift; sourceTree = ""; }; + 789F5A131DFECD54004A3694 /* KeyboardNotificationValuesError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyboardNotificationValuesError.swift; sourceTree = ""; }; + 789F5A151DFECD82004A3694 /* KeyboardWillNotificationValues.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyboardWillNotificationValues.swift; sourceTree = ""; }; + 789F5A1A1DFECF2B004A3694 /* Notification+UIKeyboardInfoValues.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Notification+UIKeyboardInfoValues.swift"; sourceTree = ""; }; + 789F5A1D1DFECF5F004A3694 /* NotificationCenter+RxKeyboardExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NotificationCenter+RxKeyboardExtensions.swift"; sourceTree = ""; }; + 789F5A1F1DFECF9F004A3694 /* KeyboardNotification.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyboardNotification.swift; sourceTree = ""; }; 78A0FCC51DC366A10070B5E1 /* StoryboardProtocol+DefaultBundle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "StoryboardProtocol+DefaultBundle.swift"; sourceTree = ""; }; 78A0FCC61DC366A10070B5E1 /* StoryboardProtocol+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "StoryboardProtocol+Extensions.swift"; sourceTree = ""; }; 78A74EA81C6B373700FE9724 /* UIView+DefaultNibName.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "UIView+DefaultNibName.swift"; path = "LeadKit/Extensions/UIView/UIView+DefaultNibName.swift"; sourceTree = SOURCE_ROOT; }; @@ -177,6 +191,8 @@ isa = PBXGroup; children = ( 78753E231DE58A5D006BC0FB /* CursorError.swift */, + 789F5A131DFECD54004A3694 /* KeyboardNotificationValuesError.swift */, + 789F5A1F1DFECF9F004A3694 /* KeyboardNotification.swift */, ); path = Enums; sourceTree = ""; @@ -184,6 +200,7 @@ 78011AAE1D48B46100EA16A2 /* Structures */ = { isa = PBXGroup; children = ( + 789F5A101DFECCFE004A3694 /* KeyboardNotificationValues */, 78011AB11D48B53600EA16A2 /* Api */, ); path = Structures; @@ -270,6 +287,39 @@ path = CursorType; sourceTree = ""; }; + 789F5A0A1DFECB52004A3694 /* UIViewAnimationCurve */ = { + isa = PBXGroup; + children = ( + 789F5A0B1DFECB71004A3694 /* UIViewAnimationCurve+AnimationOptions.swift */, + ); + path = UIViewAnimationCurve; + sourceTree = ""; + }; + 789F5A101DFECCFE004A3694 /* KeyboardNotificationValues */ = { + isa = PBXGroup; + children = ( + 789F5A111DFECD11004A3694 /* KeyboardDidNotificationValues.swift */, + 789F5A151DFECD82004A3694 /* KeyboardWillNotificationValues.swift */, + ); + path = KeyboardNotificationValues; + sourceTree = ""; + }; + 789F5A191DFECF2B004A3694 /* Notification */ = { + isa = PBXGroup; + children = ( + 789F5A1A1DFECF2B004A3694 /* Notification+UIKeyboardInfoValues.swift */, + ); + path = Notification; + sourceTree = ""; + }; + 789F5A1C1DFECF44004A3694 /* NotificationCenter */ = { + isa = PBXGroup; + children = ( + 789F5A1D1DFECF5F004A3694 /* NotificationCenter+RxKeyboardExtensions.swift */, + ); + path = NotificationCenter; + sourceTree = ""; + }; 78A0FCC41DC366A10070B5E1 /* StoryboardProtocol */ = { isa = PBXGroup; children = ( @@ -376,6 +426,9 @@ 786D78E61D53C355006B2CEA /* Alamofire */, 7884DB9A1DC1432B00E52A63 /* UserDefaults */, 789CC6091DE584C000F789D3 /* CursorType */, + 789F5A0A1DFECB52004A3694 /* UIViewAnimationCurve */, + 789F5A191DFECF2B004A3694 /* Notification */, + 789F5A1C1DFECF44004A3694 /* NotificationCenter */, ); path = Extensions; sourceTree = ""; @@ -623,6 +676,7 @@ 7837F60F1CBCF5C0000D74C1 /* EstimatedViewHeightProtocol.swift in Sources */, 78CFEE541C5C45E500F50370 /* UIView+LoadFromNib.swift in Sources */, 78D4B5461DA64D49005B0764 /* UIViewController+DefaultStoryboardIdentifier.swift in Sources */, + 789F5A141DFECD54004A3694 /* KeyboardNotificationValuesError.swift in Sources */, 7834236A1DB8D0E100A79643 /* StoryboardProtocol.swift in Sources */, 78CFEE521C5C45E500F50370 /* UITableView+CellRegistration.swift in Sources */, 78B0FC7F1C6B2C4D00358B64 /* Log.swift in Sources */, @@ -630,6 +684,7 @@ 789CC60B1DE584F800F789D3 /* CursorType+Slice.swift in Sources */, 78753E2C1DE58BF9006BC0FB /* StaticCursor.swift in Sources */, 78D4B54A1DA64EAB005B0764 /* Any+TypeName.swift in Sources */, + 789F5A201DFECF9F004A3694 /* KeyboardNotification.swift in Sources */, 78CFEE571C5C45E500F50370 /* StaticNibNameProtocol.swift in Sources */, 788EC15A1CF64528009CFB6B /* UIStoryboard+InstantiateViewController.swift in Sources */, 787783671CA04D4A001CDC9B /* String+SizeCalculation.swift in Sources */, @@ -638,6 +693,7 @@ 786D78EC1D53C46E006B2CEA /* AlamofireManager+Extensions.swift in Sources */, 78B0FC811C6B2CD500358B64 /* App.swift in Sources */, 78B036491DA562C30021D5CC /* CGImage+Template.swift in Sources */, + 789F5A1E1DFECF5F004A3694 /* NotificationCenter+RxKeyboardExtensions.swift in Sources */, 78753E301DE594B4006BC0FB /* MapCursor.swift in Sources */, 780D23461DA416F80084620D /* CGContext+Initializers.swift in Sources */, 95B39A861D9D51250057BD54 /* String+Localization.swift in Sources */, @@ -651,6 +707,8 @@ 786D78E81D53C378006B2CEA /* AlamofireRequest+Extensions.swift in Sources */, 78C36F811D8021DD00E7EBEA /* UIColor+Hex.swift in Sources */, 78CFEE5B1C5C45E500F50370 /* ViewModelProtocol.swift in Sources */, + 789F5A1B1DFECF2B004A3694 /* Notification+UIKeyboardInfoValues.swift in Sources */, + 789F5A121DFECD11004A3694 /* KeyboardDidNotificationValues.swift in Sources */, 780D23431DA412470084620D /* CGImage+Alpha.swift in Sources */, 78CFEE5A1C5C45E500F50370 /* ViewHeightProtocol.swift in Sources */, 787682FA1CAD40C300532AB3 /* StaticEstimatedViewHeightProtocol.swift in Sources */, @@ -663,8 +721,10 @@ 789CC6081DE5835600F789D3 /* CursorType.swift in Sources */, 78B0364B1DA61EDE0021D5CC /* CGImage+Crop.swift in Sources */, 78B036451DA561D00021D5CC /* CGImage+Utils.swift in Sources */, + 789F5A0C1DFECB71004A3694 /* UIViewAnimationCurve+AnimationOptions.swift in Sources */, 78CFEE591C5C45E500F50370 /* StoryboardIdentifierProtocol.swift in Sources */, 78011AB31D48B53600EA16A2 /* ApiRequestParameters.swift in Sources */, + 789F5A161DFECD82004A3694 /* KeyboardWillNotificationValues.swift in Sources */, 78B0FC7D1C6B2BE200358B64 /* LogFormatter.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/LeadKit/LeadKit/Enums/KeyboardNotification.swift b/LeadKit/LeadKit/Enums/KeyboardNotification.swift new file mode 100644 index 00000000..494e79b7 --- /dev/null +++ b/LeadKit/LeadKit/Enums/KeyboardNotification.swift @@ -0,0 +1,31 @@ +// +// KeyboardNotification.swift +// LeadKit +// +// Created by Ivan Smolin on 12/12/16. +// Copyright © 2016 Touch Instinct. All rights reserved. +// + +import Foundation + +/// A type representing an possible keyboard notifications emitted by notification center +/// with accociated keyboard notification values +/// +/// - willShow: UIKeyboardWillShow notification +/// - didShow: UIKeyboardDidShow notification +/// - willHide: UIKeyboardWillHide notification +/// - didHide: UIKeyboardDidHide notification +/// - willChangeFrame: UIKeyboardWillChangeFrame notification +/// - didChangeFrame: UIKeyboardDidChangeFrame notification +public enum KeyboardNotification { + + case willShow(notificationValues: KeyboardWillNotificationValues) + case didShow(notificationValues: KeyboardDidNotificationValues) + + case willHide(notificationValues: KeyboardWillNotificationValues) + case didHide(notificationValues: KeyboardDidNotificationValues) + + case willChangeFrame(notificationValues: KeyboardWillNotificationValues) + case didChangeFrame(notificationValues: KeyboardDidNotificationValues) + +} diff --git a/LeadKit/LeadKit/Enums/KeyboardNotificationValuesError.swift b/LeadKit/LeadKit/Enums/KeyboardNotificationValuesError.swift new file mode 100644 index 00000000..d60051cf --- /dev/null +++ b/LeadKit/LeadKit/Enums/KeyboardNotificationValuesError.swift @@ -0,0 +1,19 @@ +// +// KeyboardNotificationValuesErrors.swift +// LeadKit +// +// Created by Ivan Smolin on 12/12/16. +// Copyright © 2016 Touch Instinct. All rights reserved. +// + +import Foundation + +/// A type representing an possible errors that can be thrown during +/// initializing KeyboardWillNotificationValues or KeyboardDidNotificationValues +/// +/// - failedToInit: failed to init notification values object from given notification +public enum KeyboardNotificationValuesError: Error { + + case failedToInit(fromNotification: Notification) + +} diff --git a/LeadKit/LeadKit/Extensions/Notification/Notification+UIKeyboardInfoValues.swift b/LeadKit/LeadKit/Extensions/Notification/Notification+UIKeyboardInfoValues.swift new file mode 100644 index 00000000..ab53dfe3 --- /dev/null +++ b/LeadKit/LeadKit/Extensions/Notification/Notification+UIKeyboardInfoValues.swift @@ -0,0 +1,42 @@ +// +// Notification+UIKeyboardInfoValues.swift +// LeadKit +// +// Created by Ivan Smolin on 12/12/16. +// Copyright © 2016 Touch Instinct. All rights reserved. +// + +import Foundation + +public extension Notification { + + /// CGRect value for UIKeyboardFrameBeginUserInfoKey or nil + var keyboardFrameBegin: CGRect? { + return (userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue + } + + /// CGRect value for UIKeyboardFrameEndUserInfoKey or nil + var keyboardFrameEnd: CGRect? { + return (userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue + } + + /// TimeInterval value for UIKeyboardAnimationDurationUserInfoKey or nil + var keyboardAnimationDuration: TimeInterval? { + return (userInfo?[UIKeyboardAnimationDurationUserInfoKey] as? NSNumber)?.doubleValue + } + + /// UIViewAnimationCurve value for UIKeyboardAnimationDurationUserInfoKey or nil + var keyboardAnimationCurve: UIViewAnimationCurve? { + if let rawValue = (userInfo?[UIKeyboardAnimationDurationUserInfoKey] as? NSNumber)?.intValue { + return UIViewAnimationCurve(rawValue: rawValue) + } + + return nil + } + + /// Bool value for UIKeyboardIsLocalUserInfoKey or nil + var keyboardIsLocal: Bool? { + return (userInfo?[UIKeyboardIsLocalUserInfoKey] as? NSNumber)?.boolValue + } + +} diff --git a/LeadKit/LeadKit/Extensions/NotificationCenter/NotificationCenter+RxKeyboardExtensions.swift b/LeadKit/LeadKit/Extensions/NotificationCenter/NotificationCenter+RxKeyboardExtensions.swift new file mode 100644 index 00000000..aea09595 --- /dev/null +++ b/LeadKit/LeadKit/Extensions/NotificationCenter/NotificationCenter+RxKeyboardExtensions.swift @@ -0,0 +1,54 @@ +// +// NotificationCenter+Rx.swift +// LeadKit +// +// Created by Ivan Smolin on 12/12/16. +// Copyright © 2016 Touch Instinct. All rights reserved. +// + +import UIKit +import RxSwift +import RxCocoa + +extension Reactive where Base: NotificationCenter { + + /// Observable of KeyboardNotification subscribed to all kinds of keyboard notifications + var keyboardNotifications: Observable { + let rxNotificationCenter = NotificationCenter.default.rx + + let willShowObservable = rxNotificationCenter.notification(.UIKeyboardWillShow) + .map { notification -> KeyboardNotification in + return .willShow(notificationValues: try KeyboardWillNotificationValues(notification: notification)) + } + + let didShowObservable = rxNotificationCenter.notification(.UIKeyboardDidShow) + .map { notification -> KeyboardNotification in + return .didShow(notificationValues: try KeyboardDidNotificationValues(notification: notification)) + } + + let willHideObservable = rxNotificationCenter.notification(.UIKeyboardWillHide) + .map { notification -> KeyboardNotification in + return .willHide(notificationValues: try KeyboardWillNotificationValues(notification: notification)) + } + + let didHideObservable = rxNotificationCenter.notification(.UIKeyboardDidHide) + .map { notification -> KeyboardNotification in + return .didHide(notificationValues: try KeyboardDidNotificationValues(notification: notification)) + } + + let willChangeFrameObservable = rxNotificationCenter.notification(.UIKeyboardWillChangeFrame) + .map { notification -> KeyboardNotification in + return .willChangeFrame(notificationValues: try KeyboardWillNotificationValues(notification: notification)) + } + + let didChangeFrameObservable = rxNotificationCenter.notification(.UIKeyboardDidChangeFrame) + .map { notification -> KeyboardNotification in + return .didChangeFrame(notificationValues: try KeyboardDidNotificationValues(notification: notification)) + } + + return Observable.of(willShowObservable, didShowObservable, + willHideObservable, didHideObservable, + willChangeFrameObservable, didChangeFrameObservable).merge() + } + +} diff --git a/LeadKit/LeadKit/Extensions/UIColor/UIColor+Hex.swift b/LeadKit/LeadKit/Extensions/UIColor/UIColor+Hex.swift index 4a1d731b..d5689036 100644 --- a/LeadKit/LeadKit/Extensions/UIColor/UIColor+Hex.swift +++ b/LeadKit/LeadKit/Extensions/UIColor/UIColor+Hex.swift @@ -67,7 +67,6 @@ public extension UIColor { self.init(red: red, green: green, blue: blue, alpha: alpha) } - /** convenience failable initializer which creates an instance with given hex color values if string has a correct format diff --git a/LeadKit/LeadKit/Extensions/UIViewAnimationCurve/UIViewAnimationCurve+AnimationOptions.swift b/LeadKit/LeadKit/Extensions/UIViewAnimationCurve/UIViewAnimationCurve+AnimationOptions.swift new file mode 100644 index 00000000..c36ec8ad --- /dev/null +++ b/LeadKit/LeadKit/Extensions/UIViewAnimationCurve/UIViewAnimationCurve+AnimationOptions.swift @@ -0,0 +1,27 @@ +// +// UIViewAnimationCurve+AnimationOptions.swift +// LeadKit +// +// Created by Ivan Smolin on 12/12/16. +// Copyright © 2016 Touch Instinct. All rights reserved. +// + +import Foundation + +public extension UIViewAnimationCurve { + + /// UIViewAnimationOptions value matching current animation curve + var animationOptions: UIViewAnimationOptions { + switch self { + case .easeInOut: + return .curveEaseInOut + case .easeIn: + return .curveEaseIn + case .easeOut: + return .curveEaseOut + case .linear: + return .curveLinear + } + } + +} diff --git a/LeadKit/LeadKit/Structures/KeyboardNotificationValues/KeyboardDidNotificationValues.swift b/LeadKit/LeadKit/Structures/KeyboardNotificationValues/KeyboardDidNotificationValues.swift new file mode 100644 index 00000000..aa29b312 --- /dev/null +++ b/LeadKit/LeadKit/Structures/KeyboardNotificationValues/KeyboardDidNotificationValues.swift @@ -0,0 +1,38 @@ +// +// KeyboardDidNotificationValues.swift +// LeadKit +// +// Created by Ivan Smolin on 12/12/16. +// Copyright © 2016 Touch Instinct. All rights reserved. +// + +import UIKit + +/// Struct which keeps values from one of those notifications: +/// UIKeyboardDidShow, UIKeyboardDidHide, UIKeyboardDidChangeFrame +public struct KeyboardDidNotificationValues { + + let sizeBegin: CGSize + let sizeEnd: CGSize + let isLocal: Bool + + // Animation key/value pairs are only available for the "will" family of notification. (UIWindow.h) + +} + +public extension KeyboardDidNotificationValues { + + init(notification: Notification) throws { + guard let sizeBegin = notification.keyboardFrameBegin?.size, + let sizeEnd = notification.keyboardFrameEnd?.size, + let isLocal = notification.keyboardIsLocal else { + + throw KeyboardNotificationValuesError.failedToInit(fromNotification: notification) + } + + self.sizeBegin = sizeBegin + self.sizeEnd = sizeEnd + self.isLocal = isLocal + } + +} diff --git a/LeadKit/LeadKit/Structures/KeyboardNotificationValues/KeyboardWillNotificationValues.swift b/LeadKit/LeadKit/Structures/KeyboardNotificationValues/KeyboardWillNotificationValues.swift new file mode 100644 index 00000000..24c85b5c --- /dev/null +++ b/LeadKit/LeadKit/Structures/KeyboardNotificationValues/KeyboardWillNotificationValues.swift @@ -0,0 +1,42 @@ +// +// KeyboardWillNotificationValues.swift +// LeadKit +// +// Created by Ivan Smolin on 12/12/16. +// Copyright © 2016 Touch Instinct. All rights reserved. +// + +import UIKit + +/// Struct which keeps values from one of those notifications: +/// UIKeyboardWillShow, UIKeyboardWillHide, UIKeyboardWillChangeFrame +public struct KeyboardWillNotificationValues { + + let sizeBegin: CGSize + let sizeEnd: CGSize + let animationDuration: TimeInterval + let animationCurve: UIViewAnimationCurve + let isLocal: Bool + +} + +public extension KeyboardWillNotificationValues { + + init(notification: Notification) throws { + guard let sizeBegin = notification.keyboardFrameBegin?.size, + let sizeEnd = notification.keyboardFrameEnd?.size, + let animationDuration = notification.keyboardAnimationDuration, + let animationCurve = notification.keyboardAnimationCurve, + let isLocal = notification.keyboardIsLocal else { + + throw KeyboardNotificationValuesError.failedToInit(fromNotification: notification) + } + + self.sizeBegin = sizeBegin + self.sizeEnd = sizeEnd + self.animationDuration = animationDuration + self.animationCurve = animationCurve + self.isLocal = isLocal + } + +} From 5e482ea9e5d8ec7f2a5448ea11fd41c04cb26a53 Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Thu, 22 Dec 2016 11:55:50 +0300 Subject: [PATCH 2/4] pull request fixes --- LeadKit/LeadKit.xcodeproj/project.pbxproj | 36 +++++++------ .../KeyboardDidNotificationValues.swift | 17 +++++++ .../KeyboardNotificationValues.swift | 38 ++++++++++++++ .../KeyboardWillNotificationValues.swift | 51 +++++++++++++++++++ ...ificationCenter+RxKeyboardExtensions.swift | 6 +-- .../KeyboardDidNotificationValues.swift | 38 -------------- .../KeyboardWillNotificationValues.swift | 42 --------------- 7 files changed, 129 insertions(+), 99 deletions(-) create mode 100644 LeadKit/LeadKit/Classes/KeyboardNotificationValues/KeyboardDidNotificationValues.swift create mode 100644 LeadKit/LeadKit/Classes/KeyboardNotificationValues/KeyboardNotificationValues.swift create mode 100644 LeadKit/LeadKit/Classes/KeyboardNotificationValues/KeyboardWillNotificationValues.swift delete mode 100644 LeadKit/LeadKit/Structures/KeyboardNotificationValues/KeyboardDidNotificationValues.swift delete mode 100644 LeadKit/LeadKit/Structures/KeyboardNotificationValues/KeyboardWillNotificationValues.swift diff --git a/LeadKit/LeadKit.xcodeproj/project.pbxproj b/LeadKit/LeadKit.xcodeproj/project.pbxproj index 31a95f54..925c3d45 100644 --- a/LeadKit/LeadKit.xcodeproj/project.pbxproj +++ b/LeadKit/LeadKit.xcodeproj/project.pbxproj @@ -19,6 +19,9 @@ 7827C9391DE4ADB2009DA4E6 /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7827C9331DE4ADB2009DA4E6 /* RxSwift.framework */; }; 7834236A1DB8D0E100A79643 /* StoryboardProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 783423691DB8D0E100A79643 /* StoryboardProtocol.swift */; }; 7837F60F1CBCF5C0000D74C1 /* EstimatedViewHeightProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7837F60E1CBCF5C0000D74C1 /* EstimatedViewHeightProtocol.swift */; }; + 7845A1551E0BC97C00B527BB /* KeyboardDidNotificationValues.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7845A1531E0BC97C00B527BB /* KeyboardDidNotificationValues.swift */; }; + 7845A1561E0BC97C00B527BB /* KeyboardWillNotificationValues.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7845A1541E0BC97C00B527BB /* KeyboardWillNotificationValues.swift */; }; + 7845A1581E0BC9B900B527BB /* KeyboardNotificationValues.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7845A1571E0BC9B900B527BB /* KeyboardNotificationValues.swift */; }; 786D78E81D53C378006B2CEA /* AlamofireRequest+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 786D78E71D53C378006B2CEA /* AlamofireRequest+Extensions.swift */; }; 786D78EC1D53C46E006B2CEA /* AlamofireManager+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 786D78EB1D53C46E006B2CEA /* AlamofireManager+Extensions.swift */; }; 78753E241DE58A5D006BC0FB /* CursorError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78753E231DE58A5D006BC0FB /* CursorError.swift */; }; @@ -33,9 +36,7 @@ 789CC6081DE5835600F789D3 /* CursorType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 789CC6071DE5835600F789D3 /* CursorType.swift */; }; 789CC60B1DE584F800F789D3 /* CursorType+Slice.swift in Sources */ = {isa = PBXBuildFile; fileRef = 789CC60A1DE584F800F789D3 /* CursorType+Slice.swift */; }; 789F5A0C1DFECB71004A3694 /* UIViewAnimationCurve+AnimationOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 789F5A0B1DFECB71004A3694 /* UIViewAnimationCurve+AnimationOptions.swift */; }; - 789F5A121DFECD11004A3694 /* KeyboardDidNotificationValues.swift in Sources */ = {isa = PBXBuildFile; fileRef = 789F5A111DFECD11004A3694 /* KeyboardDidNotificationValues.swift */; }; 789F5A141DFECD54004A3694 /* KeyboardNotificationValuesError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 789F5A131DFECD54004A3694 /* KeyboardNotificationValuesError.swift */; }; - 789F5A161DFECD82004A3694 /* KeyboardWillNotificationValues.swift in Sources */ = {isa = PBXBuildFile; fileRef = 789F5A151DFECD82004A3694 /* KeyboardWillNotificationValues.swift */; }; 789F5A1B1DFECF2B004A3694 /* Notification+UIKeyboardInfoValues.swift in Sources */ = {isa = PBXBuildFile; fileRef = 789F5A1A1DFECF2B004A3694 /* Notification+UIKeyboardInfoValues.swift */; }; 789F5A1E1DFECF5F004A3694 /* NotificationCenter+RxKeyboardExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 789F5A1D1DFECF5F004A3694 /* NotificationCenter+RxKeyboardExtensions.swift */; }; 789F5A201DFECF9F004A3694 /* KeyboardNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 789F5A1F1DFECF9F004A3694 /* KeyboardNotification.swift */; }; @@ -95,6 +96,9 @@ 7827C9331DE4ADB2009DA4E6 /* RxSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxSwift.framework; path = ../../../Carthage/Build/iOS/RxSwift.framework; sourceTree = ""; }; 783423691DB8D0E100A79643 /* StoryboardProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StoryboardProtocol.swift; sourceTree = ""; }; 7837F60E1CBCF5C0000D74C1 /* EstimatedViewHeightProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EstimatedViewHeightProtocol.swift; sourceTree = ""; }; + 7845A1531E0BC97C00B527BB /* KeyboardDidNotificationValues.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyboardDidNotificationValues.swift; sourceTree = ""; }; + 7845A1541E0BC97C00B527BB /* KeyboardWillNotificationValues.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyboardWillNotificationValues.swift; sourceTree = ""; }; + 7845A1571E0BC9B900B527BB /* KeyboardNotificationValues.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyboardNotificationValues.swift; sourceTree = ""; }; 786D78E71D53C378006B2CEA /* AlamofireRequest+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AlamofireRequest+Extensions.swift"; sourceTree = ""; }; 786D78EB1D53C46E006B2CEA /* AlamofireManager+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AlamofireManager+Extensions.swift"; sourceTree = ""; }; 78753E231DE58A5D006BC0FB /* CursorError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CursorError.swift; sourceTree = ""; }; @@ -109,9 +113,7 @@ 789CC6071DE5835600F789D3 /* CursorType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CursorType.swift; sourceTree = ""; }; 789CC60A1DE584F800F789D3 /* CursorType+Slice.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CursorType+Slice.swift"; sourceTree = ""; }; 789F5A0B1DFECB71004A3694 /* UIViewAnimationCurve+AnimationOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIViewAnimationCurve+AnimationOptions.swift"; sourceTree = ""; }; - 789F5A111DFECD11004A3694 /* KeyboardDidNotificationValues.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyboardDidNotificationValues.swift; sourceTree = ""; }; 789F5A131DFECD54004A3694 /* KeyboardNotificationValuesError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyboardNotificationValuesError.swift; sourceTree = ""; }; - 789F5A151DFECD82004A3694 /* KeyboardWillNotificationValues.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyboardWillNotificationValues.swift; sourceTree = ""; }; 789F5A1A1DFECF2B004A3694 /* Notification+UIKeyboardInfoValues.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Notification+UIKeyboardInfoValues.swift"; sourceTree = ""; }; 789F5A1D1DFECF5F004A3694 /* NotificationCenter+RxKeyboardExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NotificationCenter+RxKeyboardExtensions.swift"; sourceTree = ""; }; 789F5A1F1DFECF9F004A3694 /* KeyboardNotification.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyboardNotification.swift; sourceTree = ""; }; @@ -202,7 +204,6 @@ 78011AAE1D48B46100EA16A2 /* Structures */ = { isa = PBXGroup; children = ( - 789F5A101DFECCFE004A3694 /* KeyboardNotificationValues */, 78011AB11D48B53600EA16A2 /* Api */, ); path = Structures; @@ -237,6 +238,16 @@ path = CGContext; sourceTree = ""; }; + 7845A1521E0BC97C00B527BB /* KeyboardNotificationValues */ = { + isa = PBXGroup; + children = ( + 7845A1571E0BC9B900B527BB /* KeyboardNotificationValues.swift */, + 7845A1531E0BC97C00B527BB /* KeyboardDidNotificationValues.swift */, + 7845A1541E0BC97C00B527BB /* KeyboardWillNotificationValues.swift */, + ); + path = KeyboardNotificationValues; + sourceTree = ""; + }; 786D78E61D53C355006B2CEA /* Alamofire */ = { isa = PBXGroup; children = ( @@ -297,15 +308,6 @@ path = UIViewAnimationCurve; sourceTree = ""; }; - 789F5A101DFECCFE004A3694 /* KeyboardNotificationValues */ = { - isa = PBXGroup; - children = ( - 789F5A111DFECD11004A3694 /* KeyboardDidNotificationValues.swift */, - 789F5A151DFECD82004A3694 /* KeyboardWillNotificationValues.swift */, - ); - path = KeyboardNotificationValues; - sourceTree = ""; - }; 789F5A191DFECF2B004A3694 /* Notification */ = { isa = PBXGroup; children = ( @@ -336,6 +338,7 @@ children = ( 78B0FC7B1C6B2BAE00358B64 /* Logging */, 78753E2A1DE58BED006BC0FB /* Cursors */, + 7845A1521E0BC97C00B527BB /* KeyboardNotificationValues */, ); path = Classes; sourceTree = ""; @@ -692,8 +695,10 @@ 788EC15A1CF64528009CFB6B /* UIStoryboard+InstantiateViewController.swift in Sources */, 787783671CA04D4A001CDC9B /* String+SizeCalculation.swift in Sources */, 78B036431DA4FEC90021D5CC /* CGImage+Transform.swift in Sources */, + 7845A1551E0BC97C00B527BB /* KeyboardDidNotificationValues.swift in Sources */, 78011A641D47ABC500EA16A2 /* UIView+DefaultReuseIdentifier.swift in Sources */, 786D78EC1D53C46E006B2CEA /* AlamofireManager+Extensions.swift in Sources */, + 7845A1581E0BC9B900B527BB /* KeyboardNotificationValues.swift in Sources */, 78B0FC811C6B2CD500358B64 /* App.swift in Sources */, 78B036491DA562C30021D5CC /* CGImage+Template.swift in Sources */, 789F5A1E1DFECF5F004A3694 /* NotificationCenter+RxKeyboardExtensions.swift in Sources */, @@ -706,12 +711,12 @@ 78A0FCC81DC366A10070B5E1 /* StoryboardProtocol+Extensions.swift in Sources */, 78B036411DA4D7060021D5CC /* UIImage+Extensions.swift in Sources */, 78A0FCC71DC366A10070B5E1 /* StoryboardProtocol+DefaultBundle.swift in Sources */, + 7845A1561E0BC97C00B527BB /* KeyboardWillNotificationValues.swift in Sources */, 78753E241DE58A5D006BC0FB /* CursorError.swift in Sources */, 786D78E81D53C378006B2CEA /* AlamofireRequest+Extensions.swift in Sources */, 78C36F811D8021DD00E7EBEA /* UIColor+Hex.swift in Sources */, 78CFEE5B1C5C45E500F50370 /* ViewModelProtocol.swift in Sources */, 789F5A1B1DFECF2B004A3694 /* Notification+UIKeyboardInfoValues.swift in Sources */, - 789F5A121DFECD11004A3694 /* KeyboardDidNotificationValues.swift in Sources */, EF5FB5691E0141610030E4BE /* UIView+Rotation.swift in Sources */, 780D23431DA412470084620D /* CGImage+Alpha.swift in Sources */, 78CFEE5A1C5C45E500F50370 /* ViewHeightProtocol.swift in Sources */, @@ -728,7 +733,6 @@ 789F5A0C1DFECB71004A3694 /* UIViewAnimationCurve+AnimationOptions.swift in Sources */, 78CFEE591C5C45E500F50370 /* StoryboardIdentifierProtocol.swift in Sources */, 78011AB31D48B53600EA16A2 /* ApiRequestParameters.swift in Sources */, - 789F5A161DFECD82004A3694 /* KeyboardWillNotificationValues.swift in Sources */, 78B0FC7D1C6B2BE200358B64 /* LogFormatter.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/LeadKit/LeadKit/Classes/KeyboardNotificationValues/KeyboardDidNotificationValues.swift b/LeadKit/LeadKit/Classes/KeyboardNotificationValues/KeyboardDidNotificationValues.swift new file mode 100644 index 00000000..d6805024 --- /dev/null +++ b/LeadKit/LeadKit/Classes/KeyboardNotificationValues/KeyboardDidNotificationValues.swift @@ -0,0 +1,17 @@ +// +// KeyboardDidNotificationValues.swift +// LeadKit +// +// Created by Ivan Smolin on 12/12/16. +// Copyright © 2016 Touch Instinct. All rights reserved. +// + +import UIKit + +/// Struct which keeps values from one of those notifications: +/// UIKeyboardDidShow, UIKeyboardDidHide, UIKeyboardDidChangeFrame +public final class KeyboardDidNotificationValues: KeyboardNotificationValues { + + // Animation key/value pairs are only available for the "will" family of notification. (UIWindow.h) + +} diff --git a/LeadKit/LeadKit/Classes/KeyboardNotificationValues/KeyboardNotificationValues.swift b/LeadKit/LeadKit/Classes/KeyboardNotificationValues/KeyboardNotificationValues.swift new file mode 100644 index 00000000..4fd14e9f --- /dev/null +++ b/LeadKit/LeadKit/Classes/KeyboardNotificationValues/KeyboardNotificationValues.swift @@ -0,0 +1,38 @@ +// +// KeyboardNotificationValues.swift +// LeadKit +// +// Created by Ivan Smolin on 22/12/16. +// Copyright © 2016 Touch Instinct. All rights reserved. +// + +import Foundation + +public class KeyboardNotificationValues { + + public let sizeBegin: CGSize + public let sizeEnd: CGSize + public let isLocal: Bool + + public init(sizeBegin: CGSize, sizeEnd: CGSize, isLocal: Bool) { + self.sizeBegin = sizeBegin + self.sizeEnd = sizeEnd + self.isLocal = isLocal + } + +} + +public extension KeyboardNotificationValues { + + public convenience init(notification: Notification) throws { + guard let sizeBegin = notification.keyboardFrameBegin?.size, + let sizeEnd = notification.keyboardFrameEnd?.size, + let isLocal = notification.keyboardIsLocal else { + + throw KeyboardNotificationValuesError.failedToInit(fromNotification: notification) + } + + self.init(sizeBegin: sizeBegin, sizeEnd: sizeEnd, isLocal: isLocal) + } + +} diff --git a/LeadKit/LeadKit/Classes/KeyboardNotificationValues/KeyboardWillNotificationValues.swift b/LeadKit/LeadKit/Classes/KeyboardNotificationValues/KeyboardWillNotificationValues.swift new file mode 100644 index 00000000..6ff26fe7 --- /dev/null +++ b/LeadKit/LeadKit/Classes/KeyboardNotificationValues/KeyboardWillNotificationValues.swift @@ -0,0 +1,51 @@ +// +// KeyboardWillNotificationValues.swift +// LeadKit +// +// Created by Ivan Smolin on 12/12/16. +// Copyright © 2016 Touch Instinct. All rights reserved. +// + +import UIKit + +/// Struct which keeps values from one of those notifications: +/// UIKeyboardWillShow, UIKeyboardWillHide, UIKeyboardWillChangeFrame +public final class KeyboardWillNotificationValues: KeyboardNotificationValues { + + public let animationDuration: TimeInterval + public let animationCurve: UIViewAnimationCurve + + public init(sizeBegin: CGSize, + sizeEnd: CGSize, + isLocal: Bool, + animationDuration: TimeInterval, + animationCurve: UIViewAnimationCurve) { + + self.animationDuration = animationDuration + self.animationCurve = animationCurve + + super.init(sizeBegin: sizeBegin, sizeEnd: sizeEnd, isLocal: isLocal) + } + +} + +public extension KeyboardWillNotificationValues { + + public convenience init(willNotification: Notification) throws { + guard let sizeBegin = willNotification.keyboardFrameBegin?.size, + let sizeEnd = willNotification.keyboardFrameEnd?.size, + let animationDuration = willNotification.keyboardAnimationDuration, + let animationCurve = willNotification.keyboardAnimationCurve, + let isLocal = willNotification.keyboardIsLocal else { + + throw KeyboardNotificationValuesError.failedToInit(fromNotification: willNotification) + } + + self.init(sizeBegin: sizeBegin, + sizeEnd: sizeEnd, + isLocal: isLocal, + animationDuration: animationDuration, + animationCurve: animationCurve) + } + +} diff --git a/LeadKit/LeadKit/Extensions/NotificationCenter/NotificationCenter+RxKeyboardExtensions.swift b/LeadKit/LeadKit/Extensions/NotificationCenter/NotificationCenter+RxKeyboardExtensions.swift index aea09595..670a4c9b 100644 --- a/LeadKit/LeadKit/Extensions/NotificationCenter/NotificationCenter+RxKeyboardExtensions.swift +++ b/LeadKit/LeadKit/Extensions/NotificationCenter/NotificationCenter+RxKeyboardExtensions.swift @@ -18,7 +18,7 @@ extension Reactive where Base: NotificationCenter { let willShowObservable = rxNotificationCenter.notification(.UIKeyboardWillShow) .map { notification -> KeyboardNotification in - return .willShow(notificationValues: try KeyboardWillNotificationValues(notification: notification)) + return .willShow(notificationValues: try KeyboardWillNotificationValues(willNotification: notification)) } let didShowObservable = rxNotificationCenter.notification(.UIKeyboardDidShow) @@ -28,7 +28,7 @@ extension Reactive where Base: NotificationCenter { let willHideObservable = rxNotificationCenter.notification(.UIKeyboardWillHide) .map { notification -> KeyboardNotification in - return .willHide(notificationValues: try KeyboardWillNotificationValues(notification: notification)) + return .willHide(notificationValues: try KeyboardWillNotificationValues(willNotification: notification)) } let didHideObservable = rxNotificationCenter.notification(.UIKeyboardDidHide) @@ -38,7 +38,7 @@ extension Reactive where Base: NotificationCenter { let willChangeFrameObservable = rxNotificationCenter.notification(.UIKeyboardWillChangeFrame) .map { notification -> KeyboardNotification in - return .willChangeFrame(notificationValues: try KeyboardWillNotificationValues(notification: notification)) + return .willChangeFrame(notificationValues: try KeyboardWillNotificationValues(willNotification: notification)) } let didChangeFrameObservable = rxNotificationCenter.notification(.UIKeyboardDidChangeFrame) diff --git a/LeadKit/LeadKit/Structures/KeyboardNotificationValues/KeyboardDidNotificationValues.swift b/LeadKit/LeadKit/Structures/KeyboardNotificationValues/KeyboardDidNotificationValues.swift deleted file mode 100644 index aa29b312..00000000 --- a/LeadKit/LeadKit/Structures/KeyboardNotificationValues/KeyboardDidNotificationValues.swift +++ /dev/null @@ -1,38 +0,0 @@ -// -// KeyboardDidNotificationValues.swift -// LeadKit -// -// Created by Ivan Smolin on 12/12/16. -// Copyright © 2016 Touch Instinct. All rights reserved. -// - -import UIKit - -/// Struct which keeps values from one of those notifications: -/// UIKeyboardDidShow, UIKeyboardDidHide, UIKeyboardDidChangeFrame -public struct KeyboardDidNotificationValues { - - let sizeBegin: CGSize - let sizeEnd: CGSize - let isLocal: Bool - - // Animation key/value pairs are only available for the "will" family of notification. (UIWindow.h) - -} - -public extension KeyboardDidNotificationValues { - - init(notification: Notification) throws { - guard let sizeBegin = notification.keyboardFrameBegin?.size, - let sizeEnd = notification.keyboardFrameEnd?.size, - let isLocal = notification.keyboardIsLocal else { - - throw KeyboardNotificationValuesError.failedToInit(fromNotification: notification) - } - - self.sizeBegin = sizeBegin - self.sizeEnd = sizeEnd - self.isLocal = isLocal - } - -} diff --git a/LeadKit/LeadKit/Structures/KeyboardNotificationValues/KeyboardWillNotificationValues.swift b/LeadKit/LeadKit/Structures/KeyboardNotificationValues/KeyboardWillNotificationValues.swift deleted file mode 100644 index 24c85b5c..00000000 --- a/LeadKit/LeadKit/Structures/KeyboardNotificationValues/KeyboardWillNotificationValues.swift +++ /dev/null @@ -1,42 +0,0 @@ -// -// KeyboardWillNotificationValues.swift -// LeadKit -// -// Created by Ivan Smolin on 12/12/16. -// Copyright © 2016 Touch Instinct. All rights reserved. -// - -import UIKit - -/// Struct which keeps values from one of those notifications: -/// UIKeyboardWillShow, UIKeyboardWillHide, UIKeyboardWillChangeFrame -public struct KeyboardWillNotificationValues { - - let sizeBegin: CGSize - let sizeEnd: CGSize - let animationDuration: TimeInterval - let animationCurve: UIViewAnimationCurve - let isLocal: Bool - -} - -public extension KeyboardWillNotificationValues { - - init(notification: Notification) throws { - guard let sizeBegin = notification.keyboardFrameBegin?.size, - let sizeEnd = notification.keyboardFrameEnd?.size, - let animationDuration = notification.keyboardAnimationDuration, - let animationCurve = notification.keyboardAnimationCurve, - let isLocal = notification.keyboardIsLocal else { - - throw KeyboardNotificationValuesError.failedToInit(fromNotification: notification) - } - - self.sizeBegin = sizeBegin - self.sizeEnd = sizeEnd - self.animationDuration = animationDuration - self.animationCurve = animationCurve - self.isLocal = isLocal - } - -} From dc384ef57bbb2527c03c653b60fe9bc677111c29 Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Thu, 22 Dec 2016 11:59:43 +0300 Subject: [PATCH 3/4] Revert "pull request fixes" This reverts commit 5e482ea9e5d8ec7f2a5448ea11fd41c04cb26a53. --- LeadKit/LeadKit.xcodeproj/project.pbxproj | 36 ++++++------- .../KeyboardDidNotificationValues.swift | 17 ------- .../KeyboardNotificationValues.swift | 38 -------------- .../KeyboardWillNotificationValues.swift | 51 ------------------- ...ificationCenter+RxKeyboardExtensions.swift | 6 +-- .../KeyboardDidNotificationValues.swift | 38 ++++++++++++++ .../KeyboardWillNotificationValues.swift | 42 +++++++++++++++ 7 files changed, 99 insertions(+), 129 deletions(-) delete mode 100644 LeadKit/LeadKit/Classes/KeyboardNotificationValues/KeyboardDidNotificationValues.swift delete mode 100644 LeadKit/LeadKit/Classes/KeyboardNotificationValues/KeyboardNotificationValues.swift delete mode 100644 LeadKit/LeadKit/Classes/KeyboardNotificationValues/KeyboardWillNotificationValues.swift create mode 100644 LeadKit/LeadKit/Structures/KeyboardNotificationValues/KeyboardDidNotificationValues.swift create mode 100644 LeadKit/LeadKit/Structures/KeyboardNotificationValues/KeyboardWillNotificationValues.swift diff --git a/LeadKit/LeadKit.xcodeproj/project.pbxproj b/LeadKit/LeadKit.xcodeproj/project.pbxproj index 925c3d45..31a95f54 100644 --- a/LeadKit/LeadKit.xcodeproj/project.pbxproj +++ b/LeadKit/LeadKit.xcodeproj/project.pbxproj @@ -19,9 +19,6 @@ 7827C9391DE4ADB2009DA4E6 /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7827C9331DE4ADB2009DA4E6 /* RxSwift.framework */; }; 7834236A1DB8D0E100A79643 /* StoryboardProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 783423691DB8D0E100A79643 /* StoryboardProtocol.swift */; }; 7837F60F1CBCF5C0000D74C1 /* EstimatedViewHeightProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7837F60E1CBCF5C0000D74C1 /* EstimatedViewHeightProtocol.swift */; }; - 7845A1551E0BC97C00B527BB /* KeyboardDidNotificationValues.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7845A1531E0BC97C00B527BB /* KeyboardDidNotificationValues.swift */; }; - 7845A1561E0BC97C00B527BB /* KeyboardWillNotificationValues.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7845A1541E0BC97C00B527BB /* KeyboardWillNotificationValues.swift */; }; - 7845A1581E0BC9B900B527BB /* KeyboardNotificationValues.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7845A1571E0BC9B900B527BB /* KeyboardNotificationValues.swift */; }; 786D78E81D53C378006B2CEA /* AlamofireRequest+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 786D78E71D53C378006B2CEA /* AlamofireRequest+Extensions.swift */; }; 786D78EC1D53C46E006B2CEA /* AlamofireManager+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 786D78EB1D53C46E006B2CEA /* AlamofireManager+Extensions.swift */; }; 78753E241DE58A5D006BC0FB /* CursorError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78753E231DE58A5D006BC0FB /* CursorError.swift */; }; @@ -36,7 +33,9 @@ 789CC6081DE5835600F789D3 /* CursorType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 789CC6071DE5835600F789D3 /* CursorType.swift */; }; 789CC60B1DE584F800F789D3 /* CursorType+Slice.swift in Sources */ = {isa = PBXBuildFile; fileRef = 789CC60A1DE584F800F789D3 /* CursorType+Slice.swift */; }; 789F5A0C1DFECB71004A3694 /* UIViewAnimationCurve+AnimationOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 789F5A0B1DFECB71004A3694 /* UIViewAnimationCurve+AnimationOptions.swift */; }; + 789F5A121DFECD11004A3694 /* KeyboardDidNotificationValues.swift in Sources */ = {isa = PBXBuildFile; fileRef = 789F5A111DFECD11004A3694 /* KeyboardDidNotificationValues.swift */; }; 789F5A141DFECD54004A3694 /* KeyboardNotificationValuesError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 789F5A131DFECD54004A3694 /* KeyboardNotificationValuesError.swift */; }; + 789F5A161DFECD82004A3694 /* KeyboardWillNotificationValues.swift in Sources */ = {isa = PBXBuildFile; fileRef = 789F5A151DFECD82004A3694 /* KeyboardWillNotificationValues.swift */; }; 789F5A1B1DFECF2B004A3694 /* Notification+UIKeyboardInfoValues.swift in Sources */ = {isa = PBXBuildFile; fileRef = 789F5A1A1DFECF2B004A3694 /* Notification+UIKeyboardInfoValues.swift */; }; 789F5A1E1DFECF5F004A3694 /* NotificationCenter+RxKeyboardExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 789F5A1D1DFECF5F004A3694 /* NotificationCenter+RxKeyboardExtensions.swift */; }; 789F5A201DFECF9F004A3694 /* KeyboardNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 789F5A1F1DFECF9F004A3694 /* KeyboardNotification.swift */; }; @@ -96,9 +95,6 @@ 7827C9331DE4ADB2009DA4E6 /* RxSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxSwift.framework; path = ../../../Carthage/Build/iOS/RxSwift.framework; sourceTree = ""; }; 783423691DB8D0E100A79643 /* StoryboardProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StoryboardProtocol.swift; sourceTree = ""; }; 7837F60E1CBCF5C0000D74C1 /* EstimatedViewHeightProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EstimatedViewHeightProtocol.swift; sourceTree = ""; }; - 7845A1531E0BC97C00B527BB /* KeyboardDidNotificationValues.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyboardDidNotificationValues.swift; sourceTree = ""; }; - 7845A1541E0BC97C00B527BB /* KeyboardWillNotificationValues.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyboardWillNotificationValues.swift; sourceTree = ""; }; - 7845A1571E0BC9B900B527BB /* KeyboardNotificationValues.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyboardNotificationValues.swift; sourceTree = ""; }; 786D78E71D53C378006B2CEA /* AlamofireRequest+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AlamofireRequest+Extensions.swift"; sourceTree = ""; }; 786D78EB1D53C46E006B2CEA /* AlamofireManager+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AlamofireManager+Extensions.swift"; sourceTree = ""; }; 78753E231DE58A5D006BC0FB /* CursorError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CursorError.swift; sourceTree = ""; }; @@ -113,7 +109,9 @@ 789CC6071DE5835600F789D3 /* CursorType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CursorType.swift; sourceTree = ""; }; 789CC60A1DE584F800F789D3 /* CursorType+Slice.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CursorType+Slice.swift"; sourceTree = ""; }; 789F5A0B1DFECB71004A3694 /* UIViewAnimationCurve+AnimationOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIViewAnimationCurve+AnimationOptions.swift"; sourceTree = ""; }; + 789F5A111DFECD11004A3694 /* KeyboardDidNotificationValues.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyboardDidNotificationValues.swift; sourceTree = ""; }; 789F5A131DFECD54004A3694 /* KeyboardNotificationValuesError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyboardNotificationValuesError.swift; sourceTree = ""; }; + 789F5A151DFECD82004A3694 /* KeyboardWillNotificationValues.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyboardWillNotificationValues.swift; sourceTree = ""; }; 789F5A1A1DFECF2B004A3694 /* Notification+UIKeyboardInfoValues.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Notification+UIKeyboardInfoValues.swift"; sourceTree = ""; }; 789F5A1D1DFECF5F004A3694 /* NotificationCenter+RxKeyboardExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NotificationCenter+RxKeyboardExtensions.swift"; sourceTree = ""; }; 789F5A1F1DFECF9F004A3694 /* KeyboardNotification.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyboardNotification.swift; sourceTree = ""; }; @@ -204,6 +202,7 @@ 78011AAE1D48B46100EA16A2 /* Structures */ = { isa = PBXGroup; children = ( + 789F5A101DFECCFE004A3694 /* KeyboardNotificationValues */, 78011AB11D48B53600EA16A2 /* Api */, ); path = Structures; @@ -238,16 +237,6 @@ path = CGContext; sourceTree = ""; }; - 7845A1521E0BC97C00B527BB /* KeyboardNotificationValues */ = { - isa = PBXGroup; - children = ( - 7845A1571E0BC9B900B527BB /* KeyboardNotificationValues.swift */, - 7845A1531E0BC97C00B527BB /* KeyboardDidNotificationValues.swift */, - 7845A1541E0BC97C00B527BB /* KeyboardWillNotificationValues.swift */, - ); - path = KeyboardNotificationValues; - sourceTree = ""; - }; 786D78E61D53C355006B2CEA /* Alamofire */ = { isa = PBXGroup; children = ( @@ -308,6 +297,15 @@ path = UIViewAnimationCurve; sourceTree = ""; }; + 789F5A101DFECCFE004A3694 /* KeyboardNotificationValues */ = { + isa = PBXGroup; + children = ( + 789F5A111DFECD11004A3694 /* KeyboardDidNotificationValues.swift */, + 789F5A151DFECD82004A3694 /* KeyboardWillNotificationValues.swift */, + ); + path = KeyboardNotificationValues; + sourceTree = ""; + }; 789F5A191DFECF2B004A3694 /* Notification */ = { isa = PBXGroup; children = ( @@ -338,7 +336,6 @@ children = ( 78B0FC7B1C6B2BAE00358B64 /* Logging */, 78753E2A1DE58BED006BC0FB /* Cursors */, - 7845A1521E0BC97C00B527BB /* KeyboardNotificationValues */, ); path = Classes; sourceTree = ""; @@ -695,10 +692,8 @@ 788EC15A1CF64528009CFB6B /* UIStoryboard+InstantiateViewController.swift in Sources */, 787783671CA04D4A001CDC9B /* String+SizeCalculation.swift in Sources */, 78B036431DA4FEC90021D5CC /* CGImage+Transform.swift in Sources */, - 7845A1551E0BC97C00B527BB /* KeyboardDidNotificationValues.swift in Sources */, 78011A641D47ABC500EA16A2 /* UIView+DefaultReuseIdentifier.swift in Sources */, 786D78EC1D53C46E006B2CEA /* AlamofireManager+Extensions.swift in Sources */, - 7845A1581E0BC9B900B527BB /* KeyboardNotificationValues.swift in Sources */, 78B0FC811C6B2CD500358B64 /* App.swift in Sources */, 78B036491DA562C30021D5CC /* CGImage+Template.swift in Sources */, 789F5A1E1DFECF5F004A3694 /* NotificationCenter+RxKeyboardExtensions.swift in Sources */, @@ -711,12 +706,12 @@ 78A0FCC81DC366A10070B5E1 /* StoryboardProtocol+Extensions.swift in Sources */, 78B036411DA4D7060021D5CC /* UIImage+Extensions.swift in Sources */, 78A0FCC71DC366A10070B5E1 /* StoryboardProtocol+DefaultBundle.swift in Sources */, - 7845A1561E0BC97C00B527BB /* KeyboardWillNotificationValues.swift in Sources */, 78753E241DE58A5D006BC0FB /* CursorError.swift in Sources */, 786D78E81D53C378006B2CEA /* AlamofireRequest+Extensions.swift in Sources */, 78C36F811D8021DD00E7EBEA /* UIColor+Hex.swift in Sources */, 78CFEE5B1C5C45E500F50370 /* ViewModelProtocol.swift in Sources */, 789F5A1B1DFECF2B004A3694 /* Notification+UIKeyboardInfoValues.swift in Sources */, + 789F5A121DFECD11004A3694 /* KeyboardDidNotificationValues.swift in Sources */, EF5FB5691E0141610030E4BE /* UIView+Rotation.swift in Sources */, 780D23431DA412470084620D /* CGImage+Alpha.swift in Sources */, 78CFEE5A1C5C45E500F50370 /* ViewHeightProtocol.swift in Sources */, @@ -733,6 +728,7 @@ 789F5A0C1DFECB71004A3694 /* UIViewAnimationCurve+AnimationOptions.swift in Sources */, 78CFEE591C5C45E500F50370 /* StoryboardIdentifierProtocol.swift in Sources */, 78011AB31D48B53600EA16A2 /* ApiRequestParameters.swift in Sources */, + 789F5A161DFECD82004A3694 /* KeyboardWillNotificationValues.swift in Sources */, 78B0FC7D1C6B2BE200358B64 /* LogFormatter.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/LeadKit/LeadKit/Classes/KeyboardNotificationValues/KeyboardDidNotificationValues.swift b/LeadKit/LeadKit/Classes/KeyboardNotificationValues/KeyboardDidNotificationValues.swift deleted file mode 100644 index d6805024..00000000 --- a/LeadKit/LeadKit/Classes/KeyboardNotificationValues/KeyboardDidNotificationValues.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// KeyboardDidNotificationValues.swift -// LeadKit -// -// Created by Ivan Smolin on 12/12/16. -// Copyright © 2016 Touch Instinct. All rights reserved. -// - -import UIKit - -/// Struct which keeps values from one of those notifications: -/// UIKeyboardDidShow, UIKeyboardDidHide, UIKeyboardDidChangeFrame -public final class KeyboardDidNotificationValues: KeyboardNotificationValues { - - // Animation key/value pairs are only available for the "will" family of notification. (UIWindow.h) - -} diff --git a/LeadKit/LeadKit/Classes/KeyboardNotificationValues/KeyboardNotificationValues.swift b/LeadKit/LeadKit/Classes/KeyboardNotificationValues/KeyboardNotificationValues.swift deleted file mode 100644 index 4fd14e9f..00000000 --- a/LeadKit/LeadKit/Classes/KeyboardNotificationValues/KeyboardNotificationValues.swift +++ /dev/null @@ -1,38 +0,0 @@ -// -// KeyboardNotificationValues.swift -// LeadKit -// -// Created by Ivan Smolin on 22/12/16. -// Copyright © 2016 Touch Instinct. All rights reserved. -// - -import Foundation - -public class KeyboardNotificationValues { - - public let sizeBegin: CGSize - public let sizeEnd: CGSize - public let isLocal: Bool - - public init(sizeBegin: CGSize, sizeEnd: CGSize, isLocal: Bool) { - self.sizeBegin = sizeBegin - self.sizeEnd = sizeEnd - self.isLocal = isLocal - } - -} - -public extension KeyboardNotificationValues { - - public convenience init(notification: Notification) throws { - guard let sizeBegin = notification.keyboardFrameBegin?.size, - let sizeEnd = notification.keyboardFrameEnd?.size, - let isLocal = notification.keyboardIsLocal else { - - throw KeyboardNotificationValuesError.failedToInit(fromNotification: notification) - } - - self.init(sizeBegin: sizeBegin, sizeEnd: sizeEnd, isLocal: isLocal) - } - -} diff --git a/LeadKit/LeadKit/Classes/KeyboardNotificationValues/KeyboardWillNotificationValues.swift b/LeadKit/LeadKit/Classes/KeyboardNotificationValues/KeyboardWillNotificationValues.swift deleted file mode 100644 index 6ff26fe7..00000000 --- a/LeadKit/LeadKit/Classes/KeyboardNotificationValues/KeyboardWillNotificationValues.swift +++ /dev/null @@ -1,51 +0,0 @@ -// -// KeyboardWillNotificationValues.swift -// LeadKit -// -// Created by Ivan Smolin on 12/12/16. -// Copyright © 2016 Touch Instinct. All rights reserved. -// - -import UIKit - -/// Struct which keeps values from one of those notifications: -/// UIKeyboardWillShow, UIKeyboardWillHide, UIKeyboardWillChangeFrame -public final class KeyboardWillNotificationValues: KeyboardNotificationValues { - - public let animationDuration: TimeInterval - public let animationCurve: UIViewAnimationCurve - - public init(sizeBegin: CGSize, - sizeEnd: CGSize, - isLocal: Bool, - animationDuration: TimeInterval, - animationCurve: UIViewAnimationCurve) { - - self.animationDuration = animationDuration - self.animationCurve = animationCurve - - super.init(sizeBegin: sizeBegin, sizeEnd: sizeEnd, isLocal: isLocal) - } - -} - -public extension KeyboardWillNotificationValues { - - public convenience init(willNotification: Notification) throws { - guard let sizeBegin = willNotification.keyboardFrameBegin?.size, - let sizeEnd = willNotification.keyboardFrameEnd?.size, - let animationDuration = willNotification.keyboardAnimationDuration, - let animationCurve = willNotification.keyboardAnimationCurve, - let isLocal = willNotification.keyboardIsLocal else { - - throw KeyboardNotificationValuesError.failedToInit(fromNotification: willNotification) - } - - self.init(sizeBegin: sizeBegin, - sizeEnd: sizeEnd, - isLocal: isLocal, - animationDuration: animationDuration, - animationCurve: animationCurve) - } - -} diff --git a/LeadKit/LeadKit/Extensions/NotificationCenter/NotificationCenter+RxKeyboardExtensions.swift b/LeadKit/LeadKit/Extensions/NotificationCenter/NotificationCenter+RxKeyboardExtensions.swift index 670a4c9b..aea09595 100644 --- a/LeadKit/LeadKit/Extensions/NotificationCenter/NotificationCenter+RxKeyboardExtensions.swift +++ b/LeadKit/LeadKit/Extensions/NotificationCenter/NotificationCenter+RxKeyboardExtensions.swift @@ -18,7 +18,7 @@ extension Reactive where Base: NotificationCenter { let willShowObservable = rxNotificationCenter.notification(.UIKeyboardWillShow) .map { notification -> KeyboardNotification in - return .willShow(notificationValues: try KeyboardWillNotificationValues(willNotification: notification)) + return .willShow(notificationValues: try KeyboardWillNotificationValues(notification: notification)) } let didShowObservable = rxNotificationCenter.notification(.UIKeyboardDidShow) @@ -28,7 +28,7 @@ extension Reactive where Base: NotificationCenter { let willHideObservable = rxNotificationCenter.notification(.UIKeyboardWillHide) .map { notification -> KeyboardNotification in - return .willHide(notificationValues: try KeyboardWillNotificationValues(willNotification: notification)) + return .willHide(notificationValues: try KeyboardWillNotificationValues(notification: notification)) } let didHideObservable = rxNotificationCenter.notification(.UIKeyboardDidHide) @@ -38,7 +38,7 @@ extension Reactive where Base: NotificationCenter { let willChangeFrameObservable = rxNotificationCenter.notification(.UIKeyboardWillChangeFrame) .map { notification -> KeyboardNotification in - return .willChangeFrame(notificationValues: try KeyboardWillNotificationValues(willNotification: notification)) + return .willChangeFrame(notificationValues: try KeyboardWillNotificationValues(notification: notification)) } let didChangeFrameObservable = rxNotificationCenter.notification(.UIKeyboardDidChangeFrame) diff --git a/LeadKit/LeadKit/Structures/KeyboardNotificationValues/KeyboardDidNotificationValues.swift b/LeadKit/LeadKit/Structures/KeyboardNotificationValues/KeyboardDidNotificationValues.swift new file mode 100644 index 00000000..aa29b312 --- /dev/null +++ b/LeadKit/LeadKit/Structures/KeyboardNotificationValues/KeyboardDidNotificationValues.swift @@ -0,0 +1,38 @@ +// +// KeyboardDidNotificationValues.swift +// LeadKit +// +// Created by Ivan Smolin on 12/12/16. +// Copyright © 2016 Touch Instinct. All rights reserved. +// + +import UIKit + +/// Struct which keeps values from one of those notifications: +/// UIKeyboardDidShow, UIKeyboardDidHide, UIKeyboardDidChangeFrame +public struct KeyboardDidNotificationValues { + + let sizeBegin: CGSize + let sizeEnd: CGSize + let isLocal: Bool + + // Animation key/value pairs are only available for the "will" family of notification. (UIWindow.h) + +} + +public extension KeyboardDidNotificationValues { + + init(notification: Notification) throws { + guard let sizeBegin = notification.keyboardFrameBegin?.size, + let sizeEnd = notification.keyboardFrameEnd?.size, + let isLocal = notification.keyboardIsLocal else { + + throw KeyboardNotificationValuesError.failedToInit(fromNotification: notification) + } + + self.sizeBegin = sizeBegin + self.sizeEnd = sizeEnd + self.isLocal = isLocal + } + +} diff --git a/LeadKit/LeadKit/Structures/KeyboardNotificationValues/KeyboardWillNotificationValues.swift b/LeadKit/LeadKit/Structures/KeyboardNotificationValues/KeyboardWillNotificationValues.swift new file mode 100644 index 00000000..24c85b5c --- /dev/null +++ b/LeadKit/LeadKit/Structures/KeyboardNotificationValues/KeyboardWillNotificationValues.swift @@ -0,0 +1,42 @@ +// +// KeyboardWillNotificationValues.swift +// LeadKit +// +// Created by Ivan Smolin on 12/12/16. +// Copyright © 2016 Touch Instinct. All rights reserved. +// + +import UIKit + +/// Struct which keeps values from one of those notifications: +/// UIKeyboardWillShow, UIKeyboardWillHide, UIKeyboardWillChangeFrame +public struct KeyboardWillNotificationValues { + + let sizeBegin: CGSize + let sizeEnd: CGSize + let animationDuration: TimeInterval + let animationCurve: UIViewAnimationCurve + let isLocal: Bool + +} + +public extension KeyboardWillNotificationValues { + + init(notification: Notification) throws { + guard let sizeBegin = notification.keyboardFrameBegin?.size, + let sizeEnd = notification.keyboardFrameEnd?.size, + let animationDuration = notification.keyboardAnimationDuration, + let animationCurve = notification.keyboardAnimationCurve, + let isLocal = notification.keyboardIsLocal else { + + throw KeyboardNotificationValuesError.failedToInit(fromNotification: notification) + } + + self.sizeBegin = sizeBegin + self.sizeEnd = sizeEnd + self.animationDuration = animationDuration + self.animationCurve = animationCurve + self.isLocal = isLocal + } + +} From 39d339a2783042c05ecccc43afe6c7cff0b1148e Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Thu, 22 Dec 2016 12:09:56 +0300 Subject: [PATCH 4/4] fix code review note --- LeadKit/LeadKit.xcodeproj/project.pbxproj | 16 ++----- .../Notification+UIKeyboardInfoValues.swift | 42 ------------------- .../KeyboardDidNotificationValues.swift | 8 ++-- .../KeyboardNotificationValues.swift | 33 +++++++++++++++ .../KeyboardWillNotificationValues.swift | 12 +++--- 5 files changed, 49 insertions(+), 62 deletions(-) delete mode 100644 LeadKit/LeadKit/Extensions/Notification/Notification+UIKeyboardInfoValues.swift create mode 100644 LeadKit/LeadKit/Structures/KeyboardNotificationValues/KeyboardNotificationValues.swift diff --git a/LeadKit/LeadKit.xcodeproj/project.pbxproj b/LeadKit/LeadKit.xcodeproj/project.pbxproj index 31a95f54..f9ef1920 100644 --- a/LeadKit/LeadKit.xcodeproj/project.pbxproj +++ b/LeadKit/LeadKit.xcodeproj/project.pbxproj @@ -19,6 +19,7 @@ 7827C9391DE4ADB2009DA4E6 /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7827C9331DE4ADB2009DA4E6 /* RxSwift.framework */; }; 7834236A1DB8D0E100A79643 /* StoryboardProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 783423691DB8D0E100A79643 /* StoryboardProtocol.swift */; }; 7837F60F1CBCF5C0000D74C1 /* EstimatedViewHeightProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7837F60E1CBCF5C0000D74C1 /* EstimatedViewHeightProtocol.swift */; }; + 7845A15A1E0BCD9A00B527BB /* KeyboardNotificationValues.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7845A1591E0BCD9A00B527BB /* KeyboardNotificationValues.swift */; }; 786D78E81D53C378006B2CEA /* AlamofireRequest+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 786D78E71D53C378006B2CEA /* AlamofireRequest+Extensions.swift */; }; 786D78EC1D53C46E006B2CEA /* AlamofireManager+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 786D78EB1D53C46E006B2CEA /* AlamofireManager+Extensions.swift */; }; 78753E241DE58A5D006BC0FB /* CursorError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78753E231DE58A5D006BC0FB /* CursorError.swift */; }; @@ -36,7 +37,6 @@ 789F5A121DFECD11004A3694 /* KeyboardDidNotificationValues.swift in Sources */ = {isa = PBXBuildFile; fileRef = 789F5A111DFECD11004A3694 /* KeyboardDidNotificationValues.swift */; }; 789F5A141DFECD54004A3694 /* KeyboardNotificationValuesError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 789F5A131DFECD54004A3694 /* KeyboardNotificationValuesError.swift */; }; 789F5A161DFECD82004A3694 /* KeyboardWillNotificationValues.swift in Sources */ = {isa = PBXBuildFile; fileRef = 789F5A151DFECD82004A3694 /* KeyboardWillNotificationValues.swift */; }; - 789F5A1B1DFECF2B004A3694 /* Notification+UIKeyboardInfoValues.swift in Sources */ = {isa = PBXBuildFile; fileRef = 789F5A1A1DFECF2B004A3694 /* Notification+UIKeyboardInfoValues.swift */; }; 789F5A1E1DFECF5F004A3694 /* NotificationCenter+RxKeyboardExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 789F5A1D1DFECF5F004A3694 /* NotificationCenter+RxKeyboardExtensions.swift */; }; 789F5A201DFECF9F004A3694 /* KeyboardNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 789F5A1F1DFECF9F004A3694 /* KeyboardNotification.swift */; }; 78A0FCC71DC366A10070B5E1 /* StoryboardProtocol+DefaultBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78A0FCC51DC366A10070B5E1 /* StoryboardProtocol+DefaultBundle.swift */; }; @@ -95,6 +95,7 @@ 7827C9331DE4ADB2009DA4E6 /* RxSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxSwift.framework; path = ../../../Carthage/Build/iOS/RxSwift.framework; sourceTree = ""; }; 783423691DB8D0E100A79643 /* StoryboardProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StoryboardProtocol.swift; sourceTree = ""; }; 7837F60E1CBCF5C0000D74C1 /* EstimatedViewHeightProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EstimatedViewHeightProtocol.swift; sourceTree = ""; }; + 7845A1591E0BCD9A00B527BB /* KeyboardNotificationValues.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyboardNotificationValues.swift; sourceTree = ""; }; 786D78E71D53C378006B2CEA /* AlamofireRequest+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AlamofireRequest+Extensions.swift"; sourceTree = ""; }; 786D78EB1D53C46E006B2CEA /* AlamofireManager+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AlamofireManager+Extensions.swift"; sourceTree = ""; }; 78753E231DE58A5D006BC0FB /* CursorError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CursorError.swift; sourceTree = ""; }; @@ -112,7 +113,6 @@ 789F5A111DFECD11004A3694 /* KeyboardDidNotificationValues.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyboardDidNotificationValues.swift; sourceTree = ""; }; 789F5A131DFECD54004A3694 /* KeyboardNotificationValuesError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyboardNotificationValuesError.swift; sourceTree = ""; }; 789F5A151DFECD82004A3694 /* KeyboardWillNotificationValues.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyboardWillNotificationValues.swift; sourceTree = ""; }; - 789F5A1A1DFECF2B004A3694 /* Notification+UIKeyboardInfoValues.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Notification+UIKeyboardInfoValues.swift"; sourceTree = ""; }; 789F5A1D1DFECF5F004A3694 /* NotificationCenter+RxKeyboardExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NotificationCenter+RxKeyboardExtensions.swift"; sourceTree = ""; }; 789F5A1F1DFECF9F004A3694 /* KeyboardNotification.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyboardNotification.swift; sourceTree = ""; }; 78A0FCC51DC366A10070B5E1 /* StoryboardProtocol+DefaultBundle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "StoryboardProtocol+DefaultBundle.swift"; sourceTree = ""; }; @@ -302,18 +302,11 @@ children = ( 789F5A111DFECD11004A3694 /* KeyboardDidNotificationValues.swift */, 789F5A151DFECD82004A3694 /* KeyboardWillNotificationValues.swift */, + 7845A1591E0BCD9A00B527BB /* KeyboardNotificationValues.swift */, ); path = KeyboardNotificationValues; sourceTree = ""; }; - 789F5A191DFECF2B004A3694 /* Notification */ = { - isa = PBXGroup; - children = ( - 789F5A1A1DFECF2B004A3694 /* Notification+UIKeyboardInfoValues.swift */, - ); - path = Notification; - sourceTree = ""; - }; 789F5A1C1DFECF44004A3694 /* NotificationCenter */ = { isa = PBXGroup; children = ( @@ -429,7 +422,6 @@ 7884DB9A1DC1432B00E52A63 /* UserDefaults */, 789CC6091DE584C000F789D3 /* CursorType */, 789F5A0A1DFECB52004A3694 /* UIViewAnimationCurve */, - 789F5A191DFECF2B004A3694 /* Notification */, 789F5A1C1DFECF44004A3694 /* NotificationCenter */, ); path = Extensions; @@ -695,6 +687,7 @@ 78011A641D47ABC500EA16A2 /* UIView+DefaultReuseIdentifier.swift in Sources */, 786D78EC1D53C46E006B2CEA /* AlamofireManager+Extensions.swift in Sources */, 78B0FC811C6B2CD500358B64 /* App.swift in Sources */, + 7845A15A1E0BCD9A00B527BB /* KeyboardNotificationValues.swift in Sources */, 78B036491DA562C30021D5CC /* CGImage+Template.swift in Sources */, 789F5A1E1DFECF5F004A3694 /* NotificationCenter+RxKeyboardExtensions.swift in Sources */, 78753E301DE594B4006BC0FB /* MapCursor.swift in Sources */, @@ -710,7 +703,6 @@ 786D78E81D53C378006B2CEA /* AlamofireRequest+Extensions.swift in Sources */, 78C36F811D8021DD00E7EBEA /* UIColor+Hex.swift in Sources */, 78CFEE5B1C5C45E500F50370 /* ViewModelProtocol.swift in Sources */, - 789F5A1B1DFECF2B004A3694 /* Notification+UIKeyboardInfoValues.swift in Sources */, 789F5A121DFECD11004A3694 /* KeyboardDidNotificationValues.swift in Sources */, EF5FB5691E0141610030E4BE /* UIView+Rotation.swift in Sources */, 780D23431DA412470084620D /* CGImage+Alpha.swift in Sources */, diff --git a/LeadKit/LeadKit/Extensions/Notification/Notification+UIKeyboardInfoValues.swift b/LeadKit/LeadKit/Extensions/Notification/Notification+UIKeyboardInfoValues.swift deleted file mode 100644 index ab53dfe3..00000000 --- a/LeadKit/LeadKit/Extensions/Notification/Notification+UIKeyboardInfoValues.swift +++ /dev/null @@ -1,42 +0,0 @@ -// -// Notification+UIKeyboardInfoValues.swift -// LeadKit -// -// Created by Ivan Smolin on 12/12/16. -// Copyright © 2016 Touch Instinct. All rights reserved. -// - -import Foundation - -public extension Notification { - - /// CGRect value for UIKeyboardFrameBeginUserInfoKey or nil - var keyboardFrameBegin: CGRect? { - return (userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue - } - - /// CGRect value for UIKeyboardFrameEndUserInfoKey or nil - var keyboardFrameEnd: CGRect? { - return (userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue - } - - /// TimeInterval value for UIKeyboardAnimationDurationUserInfoKey or nil - var keyboardAnimationDuration: TimeInterval? { - return (userInfo?[UIKeyboardAnimationDurationUserInfoKey] as? NSNumber)?.doubleValue - } - - /// UIViewAnimationCurve value for UIKeyboardAnimationDurationUserInfoKey or nil - var keyboardAnimationCurve: UIViewAnimationCurve? { - if let rawValue = (userInfo?[UIKeyboardAnimationDurationUserInfoKey] as? NSNumber)?.intValue { - return UIViewAnimationCurve(rawValue: rawValue) - } - - return nil - } - - /// Bool value for UIKeyboardIsLocalUserInfoKey or nil - var keyboardIsLocal: Bool? { - return (userInfo?[UIKeyboardIsLocalUserInfoKey] as? NSNumber)?.boolValue - } - -} diff --git a/LeadKit/LeadKit/Structures/KeyboardNotificationValues/KeyboardDidNotificationValues.swift b/LeadKit/LeadKit/Structures/KeyboardNotificationValues/KeyboardDidNotificationValues.swift index aa29b312..5e0329e2 100644 --- a/LeadKit/LeadKit/Structures/KeyboardNotificationValues/KeyboardDidNotificationValues.swift +++ b/LeadKit/LeadKit/Structures/KeyboardNotificationValues/KeyboardDidNotificationValues.swift @@ -23,9 +23,11 @@ public struct KeyboardDidNotificationValues { public extension KeyboardDidNotificationValues { init(notification: Notification) throws { - guard let sizeBegin = notification.keyboardFrameBegin?.size, - let sizeEnd = notification.keyboardFrameEnd?.size, - let isLocal = notification.keyboardIsLocal else { + let notificationValues = KeyboardNotificationValues(notification: notification) + + guard let sizeBegin = notificationValues.frameBegin?.size, + let sizeEnd = notificationValues.frameEnd?.size, + let isLocal = notificationValues.isLocal else { throw KeyboardNotificationValuesError.failedToInit(fromNotification: notification) } diff --git a/LeadKit/LeadKit/Structures/KeyboardNotificationValues/KeyboardNotificationValues.swift b/LeadKit/LeadKit/Structures/KeyboardNotificationValues/KeyboardNotificationValues.swift new file mode 100644 index 00000000..7a81cb28 --- /dev/null +++ b/LeadKit/LeadKit/Structures/KeyboardNotificationValues/KeyboardNotificationValues.swift @@ -0,0 +1,33 @@ +// +// KeyboardNotificationValues.swift +// LeadKit +// +// Created by Ivan Smolin on 22/12/16. +// Copyright © 2016 Touch Instinct. All rights reserved. +// + +import UIKit + +internal struct KeyboardNotificationValues { + + let frameBegin: CGRect? + let frameEnd: CGRect? + let animationDuration: TimeInterval? + let animationCurve: UIViewAnimationCurve? + let isLocal: Bool? + + init(notification: Notification) { + frameBegin = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue + frameEnd = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue + animationDuration = (notification.userInfo?[UIKeyboardAnimationDurationUserInfoKey] as? NSNumber)?.doubleValue + + if let rawValue = (notification.userInfo?[UIKeyboardAnimationDurationUserInfoKey] as? NSNumber)?.intValue { + animationCurve = UIViewAnimationCurve(rawValue: rawValue) + } else { + animationCurve = nil + } + + isLocal = (notification.userInfo?[UIKeyboardIsLocalUserInfoKey] as? NSNumber)?.boolValue + } + +} diff --git a/LeadKit/LeadKit/Structures/KeyboardNotificationValues/KeyboardWillNotificationValues.swift b/LeadKit/LeadKit/Structures/KeyboardNotificationValues/KeyboardWillNotificationValues.swift index 24c85b5c..b652e77b 100644 --- a/LeadKit/LeadKit/Structures/KeyboardNotificationValues/KeyboardWillNotificationValues.swift +++ b/LeadKit/LeadKit/Structures/KeyboardNotificationValues/KeyboardWillNotificationValues.swift @@ -23,11 +23,13 @@ public struct KeyboardWillNotificationValues { public extension KeyboardWillNotificationValues { init(notification: Notification) throws { - guard let sizeBegin = notification.keyboardFrameBegin?.size, - let sizeEnd = notification.keyboardFrameEnd?.size, - let animationDuration = notification.keyboardAnimationDuration, - let animationCurve = notification.keyboardAnimationCurve, - let isLocal = notification.keyboardIsLocal else { + let notificationValues = KeyboardNotificationValues(notification: notification) + + guard let sizeBegin = notificationValues.frameBegin?.size, + let sizeEnd = notificationValues.frameEnd?.size, + let animationDuration = notificationValues.animationDuration, + let animationCurve = notificationValues.animationCurve, + let isLocal = notificationValues.isLocal else { throw KeyboardNotificationValuesError.failedToInit(fromNotification: notification) }