@@ -79,10 +79,9 @@ open class SideNavigationController: UIViewController {
7979 self . visibleSideViewController? . view. isHidden = false
8080 #if os(iOS)
8181 self . setNeedsStatusBarAppearanceUpdate ( )
82+ #elseif os(tvOS)
83+ self . setNeedsFocusUpdate ( )
8284 #endif
83- if #available( iOS 9 . 0 , * ) {
84- self . setNeedsFocusUpdate ( )
85- }
8685 }
8786 }
8887 }
@@ -129,8 +128,7 @@ open class SideNavigationController: UIViewController {
129128 self . view. addGestureRecognizer ( self . gestures. leftScreenEdgePan)
130129 self . view. addGestureRecognizer ( self . gestures. rightScreenEdgePan)
131130 self . sideGestures ( enabled: true )
132- #endif
133- #if os(tvOS)
131+ #elseif os(tvOS)
134132 self . view. addGestureRecognizer ( self . gestures. mainPan)
135133 self . view. addGestureRecognizer ( self . gestures. mainTap)
136134 #endif
@@ -156,20 +154,18 @@ open class SideNavigationController: UIViewController {
156154 }
157155
158156 #if os(iOS)
159-
160157 open override var childViewControllerForStatusBarStyle : UIViewController ? {
161158 return self . visibleViewController
162159 }
163160
164161 open override var childViewControllerForStatusBarHidden : UIViewController ? {
165162 return self . visibleViewController
166163 }
167-
168- #endif
169-
164+ #elseif os(tvOS)
170165 open override var preferredFocusEnvironments : [ UIFocusEnvironment ] {
171166 return self . visibleViewController. preferredFocusEnvironments
172167 }
168+ #endif
173169
174170 public func leftSide( viewController: UIViewController , options: Options = Options ( ) ) {
175171 self . setSide ( Side ( viewController: viewController, options: options) , direction: . left)
@@ -191,10 +187,14 @@ open class SideNavigationController: UIViewController {
191187 }
192188
193189 private func close( direction: Direction , animated: Bool ) {
190+ guard self . visibleSideViewController != nil else {
191+ return ; // NO SIDE VISIBLE TO CLOSE
192+ }
194193 guard let side = self . side ( direction: direction) else {
195194 // EXCEPTION
196195 return
197196 }
197+ side. viewController. view. endEditing ( animated)
198198 UIView . animate ( withDuration: animated ? side. options. animationDuration : 0 , animations: {
199199 self . visibleSideViewController = nil
200200 side. viewController. view. isHidden = false
@@ -218,14 +218,14 @@ open class SideNavigationController: UIViewController {
218218 }
219219
220220 fileprivate func show( direction: Direction , animated: Bool ) {
221- self . view. endEditing ( animated)
222221 guard let side = self . side ( direction: direction) else {
223222 // EXCEPTION
224223 return
225224 }
226225 guard side. viewController == self . visibleSideViewController || self . visibleSideViewController == nil else {
227226 return
228227 }
228+ self . mainViewController. view. endEditing ( animated)
229229 UIView . animate ( withDuration: animated ? side. options. animationDuration : 0 , animations: {
230230 self . visibleSideViewController = side. viewController
231231 self . updateSide ( with: direction, progress: 1 )
@@ -261,7 +261,6 @@ open class SideNavigationController: UIViewController {
261261 }
262262 }
263263 self . overlay. isUserInteractionEnabled = overlayInteractionEnabled
264- self . mainContainer. isUserInteractionEnabled = !overlayInteractionEnabled
265264 self . gestures. mainPan. isEnabled = panningEnabled
266265 self . gestures. mainTap. isEnabled = enabled
267266 }
@@ -316,7 +315,9 @@ public extension SideNavigationController {
316315 self . mainPan = UIPanGestureRecognizer ( target: self , action: #selector( handle ( panGesture: ) ) )
317316
318317 self . mainTap = UITapGestureRecognizer ( target: self , action: #selector( handle ( tapGesture: ) ) )
319-
318+ #if os(tvOS)
319+ self . mainTap. allowedPressTypes = [ NSNumber ( value: UIPressType . menu. rawValue) ]
320+ #endif
320321 self . mainTap. require ( toFail: self . mainPan)
321322 }
322323
@@ -366,19 +367,27 @@ public extension SideNavigationController {
366367
367368fileprivate extension SideNavigationController {
368369
369- fileprivate func updateBack( side: Side , direction: Direction , progress: CGFloat ) {
370- self . overlay. alpha = side. options. overlayOpacity * progress
371- self . overlay. backgroundColor = side. options. overlayColor
372- self . mainContainer. layer. shadowColor = side. options. shadowCGColor
373- self . mainContainer. layer. shadowOpacity = Float ( side. options. shadowOpacity)
374- self . mainContainer. layer. shadowRadius = 10
375- if side. options. scale != 1 {
376- let scale = 1 - ( 1 - side. options. scale) * progress
370+ fileprivate func apply( options: Options , front: UIView ! , back: UIView ! , progress: CGFloat ) {
371+ self . overlay. alpha = options. overlayOpacity * progress
372+ self . overlay. backgroundColor = options. overlayColor
373+ front. layer. shadowColor = options. shadowCGColor
374+ front. layer. shadowOpacity = Float ( options. shadowOpacity)
375+ front. layer. shadowRadius = 10
376+ back. layer. shadowColor = nil
377+ back. layer. shadowOpacity = 0
378+ back. layer. shadowRadius = 3
379+ if options. scale != 1 {
380+ let scale = 1 - ( 1 - options. scale) * progress
377381 self . mainContainer. transform = CGAffineTransform . identity. scaledBy ( x: scale, y: scale)
378382 }
383+ }
384+
385+ fileprivate func updateBack( side: Side , direction: Direction , progress: CGFloat ) {
386+ let sideView : UIView ! = side. viewController. view
387+ self . apply ( options: side. options, front: self . mainContainer, back: sideView, progress: progress)
379388 var mainFrame = self . mainContainer. frame
380389 let viewBounds = self . view. bounds
381- var sideFrame = side . viewController . view . frame
390+ var sideFrame = sideView . frame
382391 sideFrame. size. width = viewBounds. width * side. options. widthPercent
383392 sideFrame. size. height = viewBounds. height
384393 let parallaxWidth = sideFrame. width / 3
@@ -393,23 +402,12 @@ fileprivate extension SideNavigationController {
393402 break
394403 }
395404 self . mainContainer. frame = mainFrame
396- side . viewController . view . frame = sideFrame
405+ sideView . frame = sideFrame
397406 }
398407
399408 fileprivate func updateFront( side: Side , direction: Direction , progress: CGFloat ) {
400- self . overlay. alpha = side. options. overlayOpacity * progress
401- self . overlay. backgroundColor = side. options. overlayColor
402- self . mainContainer. layer. shadowColor = nil
403- self . mainContainer. layer. shadowOpacity = 0
404- self . mainContainer. layer. shadowRadius = 3
405409 let sideView : UIView ! = side. viewController. view
406- sideView. layer. shadowColor = side. options. shadowCGColor
407- sideView. layer. shadowOpacity = Float ( side. options. shadowOpacity)
408- sideView. layer. shadowRadius = 10
409- if side. options. scale != 1 {
410- let scale = 1 - ( 1 - side. options. scale) * progress
411- self . mainContainer. transform = CGAffineTransform . identity. scaledBy ( x: scale, y: scale)
412- }
410+ self . apply ( options: side. options, front: sideView, back: self . mainContainer, progress: progress)
413411 let viewBounds = self . view. bounds
414412 var sideFrame = sideView. frame
415413 sideFrame. size. width = viewBounds. width * side. options. widthPercent
0 commit comments