diff --git a/PanModal/Animator/PanModalPresentationAnimator.swift b/PanModal/Animator/PanModalPresentationAnimator.swift index f7fbdd0e..4963667d 100644 --- a/PanModal/Animator/PanModalPresentationAnimator.swift +++ b/PanModal/Animator/PanModalPresentationAnimator.swift @@ -42,7 +42,21 @@ public class PanModalPresentationAnimator: NSObject { /** Haptic feedback generator (during presentation) */ - private var feedbackGenerator: UISelectionFeedbackGenerator? + private var _feedbackGenerator: Any? = nil + @available(iOS 10.0, *) + fileprivate var feedbackGenerator: UISelectionFeedbackGenerator? { + + set { + _feedbackGenerator = newValue + } + + get { + if _feedbackGenerator == nil { + _feedbackGenerator = UISelectionFeedbackGenerator() + } + return _feedbackGenerator as? UISelectionFeedbackGenerator + } + } // MARK: - Initializers @@ -54,8 +68,11 @@ public class PanModalPresentationAnimator: NSObject { Prepare haptic feedback, only during the presentation state */ if case .presentation = transitionStyle { - feedbackGenerator = UISelectionFeedbackGenerator() - feedbackGenerator?.prepare() + + if #available(iOS 10.0, *) { + feedbackGenerator = UISelectionFeedbackGenerator() + feedbackGenerator?.prepare() + } } } @@ -85,8 +102,10 @@ public class PanModalPresentationAnimator: NSObject { panView.frame.origin.y = transitionContext.containerView.frame.height // Haptic feedback - if presentable?.isHapticFeedbackEnabled == true { - feedbackGenerator?.selectionChanged() + if #available(iOS 10.0, *) { + if presentable?.isHapticFeedbackEnabled == true { + feedbackGenerator?.selectionChanged() + } } PanModalAnimator.animate({ @@ -95,7 +114,10 @@ public class PanModalPresentationAnimator: NSObject { // Calls viewDidAppear and viewDidDisappear fromVC.endAppearanceTransition() transitionContext.completeTransition(didComplete) - self?.feedbackGenerator = nil + + if #available(iOS 10.0, *) { + self?.feedbackGenerator = nil + } } } diff --git a/PanModalDemo.xcodeproj/project.pbxproj b/PanModalDemo.xcodeproj/project.pbxproj index 0fe4e141..b64a697b 100644 --- a/PanModalDemo.xcodeproj/project.pbxproj +++ b/PanModalDemo.xcodeproj/project.pbxproj @@ -832,7 +832,7 @@ CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = 6UF7FN999R; INFOPLIST_FILE = "$(SRCROOT)/Sample/Resources/Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -853,7 +853,7 @@ CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = 6UF7FN999R; INFOPLIST_FILE = "$(SRCROOT)/Sample/Resources/Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", diff --git a/Sample/View Controllers/Alert (Transient)/TransientAlertViewController.swift b/Sample/View Controllers/Alert (Transient)/TransientAlertViewController.swift index ee9b6693..af069027 100644 --- a/Sample/View Controllers/Alert (Transient)/TransientAlertViewController.swift +++ b/Sample/View Controllers/Alert (Transient)/TransientAlertViewController.swift @@ -26,13 +26,17 @@ class TransientAlertViewController: AlertViewController { private func startTimer() { timer?.invalidate() - timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { [weak self] _ in - self?.countdown -= 1 - self?.updateMessage() + if #available(iOS 10.0, *) { + timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { [weak self] _ in + self?.updateMessage() + } + } else { + Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(self.updateMessage), userInfo: nil, repeats: true) } } @objc func updateMessage() { + countdown -= 1 guard countdown > 0 else { invalidateTimer() dismiss(animated: true, completion: nil)