Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
Material
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Dmitriy Stepanets
Material
Commits
d285dc36
Commit
d285dc36
authored
Aug 26, 2015
by
Daniel Dahan
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #10 from GraphKit/issue-8
refactored SideNav
parents
07e11946
2b49143c
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
91 additions
and
172 deletions
+91
-172
Source/SideNavController.swift
+91
-172
No files found.
Source/SideNavController.swift
View file @
d285dc36
...
...
@@ -104,7 +104,7 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
:name: isRightContainerOpened
*/
public
var
isRightContainerOpened
:
Bool
{
return
rightViewContainer
.
frame
.
origin
.
x
==
rightOrigin
-
rightViewContainer
.
frame
.
size
.
width
return
rightViewContainer
.
frame
.
origin
.
x
==
rightOrigin
X
-
rightViewContainer
.
frame
.
size
.
width
}
/**
...
...
@@ -170,9 +170,9 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
public
var
leftPanGesture
:
UIPanGestureRecognizer
?
/**
:name: leftTapGe
t
sture
:name: leftTapGesture
*/
public
var
leftTapGe
t
sture
:
UITapGestureRecognizer
?
public
var
leftTapGesture
:
UITapGestureRecognizer
?
/**
:name: rightPanGesture
...
...
@@ -186,16 +186,16 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
public
var
rightTapGesture
:
UITapGestureRecognizer
?
//
// :name: leftOrigin
// :name: leftOrigin
X
//
private
var
leftOrigin
:
CGFloat
{
private
var
leftOrigin
X
:
CGFloat
{
return
-
options
.
leftViewContainerWidth
}
//
// :name: rightOrigin
// :name: rightOrigin
X
//
private
var
rightOrigin
:
CGFloat
{
private
var
rightOrigin
X
:
CGFloat
{
return
view
.
bounds
.
width
}
...
...
@@ -270,17 +270,17 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
leftViewContainer
.
hidden
=
true
rightViewContainer
.
hidden
=
true
coordinator
.
animateAlongsideTransition
(
nil
)
{
_
in
self
.
clos
eWindow
()
self
.
toggl
eWindow
()
self
.
backdropViewContainer
.
layer
.
opacity
=
0
self
.
mainViewContainer
.
transform
=
CGAffineTransformMakeScale
(
1
,
1
)
self
.
isUserInteractionEnabled
=
true
self
.
leftViewContainer
.
frame
.
origin
.
x
=
self
.
leftOrigin
self
.
leftViewContainer
.
frame
.
origin
.
x
=
self
.
leftOrigin
X
self
.
leftViewContainer
.
hidden
=
false
self
.
removeShadow
(
self
.
leftViewContainer
)
self
.
prepareLeftGestures
()
self
.
rightViewContainer
.
frame
.
origin
.
x
=
self
.
rightOrigin
self
.
rightViewContainer
.
frame
.
origin
.
x
=
self
.
rightOrigin
X
self
.
rightViewContainer
.
hidden
=
false
self
.
removeShadow
(
self
.
rightViewContainer
)
self
.
prepareRightGestures
()
...
...
@@ -305,7 +305,7 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
:name: openLeftViewContainer
*/
public
func
openLeftViewContainer
(
velocity
:
CGFloat
=
0
)
{
prepare
LeftContainerToOpen
(
)
prepare
ContainerToOpen
(
&
leftViewController
,
viewContainer
:
&
leftViewContainer
,
state
:
leftContainer
.
state
)
UIView
.
animateWithDuration
(
Double
(
0
==
velocity
?
options
.
animationDuration
:
fmax
(
0.1
,
fmin
(
1
,
Double
(
leftViewContainer
.
frame
.
origin
.
x
/
velocity
)))),
delay
:
0
,
options
:
.
CurveEaseInOut
,
...
...
@@ -326,12 +326,12 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
:name: openRightViewContainer
*/
public
func
openRightViewContainer
(
velocity
:
CGFloat
=
0
)
{
prepare
RightContainerToOpen
(
)
UIView
.
animateWithDuration
(
Double
(
0
==
velocity
?
options
.
animationDuration
:
fmax
(
0.1
,
fmin
(
1
,
Double
(
fabs
(
rightViewContainer
.
frame
.
origin
.
x
-
rightOrigin
)
/
velocity
)))),
prepare
ContainerToOpen
(
&
rightViewController
,
viewContainer
:
&
rightViewContainer
,
state
:
rightContainer
.
state
)
UIView
.
animateWithDuration
(
Double
(
0
==
velocity
?
options
.
animationDuration
:
fmax
(
0.1
,
fmin
(
1
,
Double
(
fabs
(
rightViewContainer
.
frame
.
origin
.
x
-
rightOrigin
X
)
/
velocity
)))),
delay
:
0
,
options
:
.
CurveEaseInOut
,
animations
:
{
_
in
self
.
rightViewContainer
.
frame
.
origin
.
x
=
self
.
rightOrigin
-
self
.
rightViewContainer
.
frame
.
size
.
width
self
.
rightViewContainer
.
frame
.
origin
.
x
=
self
.
rightOrigin
X
-
self
.
rightViewContainer
.
frame
.
size
.
width
self
.
backdropViewContainer
.
layer
.
opacity
=
Float
(
options
.
contentViewOpacity
)
self
.
mainViewContainer
.
transform
=
CGAffineTransformMakeScale
(
options
.
contentViewScale
,
options
.
contentViewScale
)
}
...
...
@@ -347,12 +347,12 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
:name: closeLeftViewContainer
*/
public
func
closeLeftViewContainer
(
velocity
:
CGFloat
=
0
)
{
prepare
LeftContainerToClose
(
)
UIView
.
animateWithDuration
(
Double
(
0
==
velocity
?
options
.
animationDuration
:
fmax
(
0.1
,
fmin
(
1
,
fabs
(
leftViewContainer
.
frame
.
origin
.
x
-
leftOrigin
)
/
velocity
))),
prepare
ContainerToClose
(
&
leftViewController
,
state
:
leftContainer
.
state
)
UIView
.
animateWithDuration
(
Double
(
0
==
velocity
?
options
.
animationDuration
:
fmax
(
0.1
,
fmin
(
1
,
fabs
(
leftViewContainer
.
frame
.
origin
.
x
-
leftOrigin
X
)
/
velocity
))),
delay
:
0
,
options
:
.
CurveEaseInOut
,
animations
:
{
_
in
self
.
leftViewContainer
.
frame
.
origin
.
x
=
self
.
leftOrigin
self
.
leftViewContainer
.
frame
.
origin
.
x
=
self
.
leftOrigin
X
self
.
backdropViewContainer
.
layer
.
opacity
=
0
self
.
mainViewContainer
.
transform
=
CGAffineTransformMakeScale
(
1
,
1
)
}
...
...
@@ -369,12 +369,12 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
:name: closeRightViewContainer
*/
public
func
closeRightViewContainer
(
velocity
:
CGFloat
=
0
)
{
prepare
RightContainerToClose
(
)
UIView
.
animateWithDuration
(
Double
(
0
==
velocity
?
options
.
animationDuration
:
fmax
(
0.1
,
fmin
(
1
,
fabs
(
rightViewContainer
.
frame
.
origin
.
x
-
rightOrigin
)
/
velocity
))),
prepare
ContainerToClose
(
&
rightViewController
,
state
:
rightContainer
.
state
)
UIView
.
animateWithDuration
(
Double
(
0
==
velocity
?
options
.
animationDuration
:
fmax
(
0.1
,
fmin
(
1
,
fabs
(
rightViewContainer
.
frame
.
origin
.
x
-
rightOrigin
X
)
/
velocity
))),
delay
:
0
,
options
:
.
CurveEaseInOut
,
animations
:
{
_
in
self
.
rightViewContainer
.
frame
.
origin
.
x
=
self
.
rightOrigin
self
.
rightViewContainer
.
frame
.
origin
.
x
=
self
.
rightOrigin
X
self
.
backdropViewContainer
.
layer
.
opacity
=
0
self
.
mainViewContainer
.
transform
=
CGAffineTransformMakeScale
(
1
,
1
)
}
...
...
@@ -429,16 +429,16 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
//
public
func
gestureRecognizer
(
gestureRecognizer
:
UIGestureRecognizer
,
shouldReceiveTouch
touch
:
UITouch
)
->
Bool
{
if
gestureRecognizer
==
leftPanGesture
{
return
gesturePanLeftViewController
(
gestureRecognizer
,
p
oint
:
touch
.
locationInView
(
view
))
return
gesturePanLeftViewController
(
gestureRecognizer
,
withTouchP
oint
:
touch
.
locationInView
(
view
))
}
if
gestureRecognizer
==
rightPanGesture
{
return
gesturePanRightViewController
(
gestureRecognizer
,
withTouchPoint
:
touch
.
locationInView
(
view
))
}
if
gestureRecognizer
==
leftTapGe
t
sture
{
return
isLeftContainerOpened
&&
!
isPointContainedWithin
LeftRectViewController
(
touch
.
locationInView
(
view
))
if
gestureRecognizer
==
leftTapGesture
{
return
isLeftContainerOpened
&&
!
isPointContainedWithin
ViewController
(
&
leftViewContainer
,
point
:
touch
.
locationInView
(
view
))
}
if
gestureRecognizer
==
rightTapGesture
{
return
isRightContainerOpened
&&
!
isPointContainedWithin
RightViewController
(
touch
.
locationInView
(
view
))
return
isRightContainerOpened
&&
!
isPointContainedWithin
ViewController
(
&
rightViewContainer
,
point
:
touch
.
locationInView
(
view
))
}
return
true
}
...
...
@@ -450,70 +450,40 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
prepareMainContainer
()
prepareBackdropContainer
()
prepare
LeftContainer
(
)
prepare
Container
(
&
leftContainer
,
viewContainer
:
&
leftViewContainer
,
originX
:
leftOriginX
,
width
:
options
.
leftViewContainerWidth
)
prepareLeftGestures
()
prepare
RightContainer
(
)
prepare
Container
(
&
rightContainer
,
viewContainer
:
&
rightViewContainer
,
originX
:
rightOriginX
,
width
:
options
.
rightViewContainerWidth
)
prepareRightGestures
()
}
//
// :name: add
Left
Gestures
// :name: addGestures
//
private
func
addLeftGestures
(
)
{
if
nil
==
leftPanGesture
{
leftPanGesture
=
UIPanGestureRecognizer
(
target
:
self
,
action
:
"handleLeftPanGesture:"
)
leftPanGesture
!.
delegate
=
self
view
.
addGestureRecognizer
(
leftPanGesture
!
)
private
func
addGestures
(
inout
pan
:
UIPanGestureRecognizer
?,
panSelector
:
Selector
,
inout
tap
:
UITapGestureRecognizer
?,
tapSelector
:
Selector
)
{
if
nil
==
pan
{
pan
=
UIPanGestureRecognizer
(
target
:
self
,
action
:
panSelector
)
pan
!.
delegate
=
self
view
.
addGestureRecognizer
(
pan
!
)
}
if
nil
==
leftTapGetsture
{
leftTapGetsture
=
UITapGestureRecognizer
(
target
:
self
,
action
:
"handleLeftTapGesture:"
)
leftTapGetsture
!.
delegate
=
self
view
.
addGestureRecognizer
(
leftTapGetsture
!
)
if
nil
==
tap
{
tap
=
UITapGestureRecognizer
(
target
:
self
,
action
:
tapSelector
)
tap
!.
delegate
=
self
view
.
addGestureRecognizer
(
tap
!
)
}
}
//
// :name:
addRight
Gestures
// :name:
remove
Gestures
//
private
func
addRightGestures
()
{
if
nil
==
rightPanGesture
{
rightPanGesture
=
UIPanGestureRecognizer
(
target
:
self
,
action
:
"handleRightPanGesture:"
)
rightPanGesture
!.
delegate
=
self
view
.
addGestureRecognizer
(
rightPanGesture
!
)
}
if
nil
==
rightTapGesture
{
rightTapGesture
=
UITapGestureRecognizer
(
target
:
self
,
action
:
"handleRightTapGesture:"
)
rightTapGesture
!.
delegate
=
self
view
.
addGestureRecognizer
(
rightTapGesture
!
)
}
}
//
// :name: removeLeftGestures
//
private
func
removeLeftGestures
()
{
if
let
l
=
leftPanGesture
{
view
.
removeGestureRecognizer
(
l
)
leftPanGesture
=
nil
private
func
removeGestures
(
inout
pan
:
UIPanGestureRecognizer
?,
inout
tap
:
UITapGestureRecognizer
?)
{
if
let
g
=
pan
{
view
.
removeGestureRecognizer
(
g
)
pan
=
nil
}
if
let
l
=
leftTapGetsture
{
view
.
removeGestureRecognizer
(
l
)
leftTapGetsture
=
nil
}
}
//
// :name: removeRightGestures
//
private
func
removeRightGestures
()
{
if
let
r
=
rightPanGesture
{
view
.
removeGestureRecognizer
(
r
)
rightPanGesture
=
nil
}
if
let
r
=
rightTapGesture
{
view
.
removeGestureRecognizer
(
r
)
rightTapGesture
=
nil
if
let
g
=
tap
{
view
.
removeGestureRecognizer
(
g
)
tap
=
nil
}
}
...
...
@@ -529,13 +499,13 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
delegate
?
.
sideNavDidBeginLeftPan
?(
self
,
container
:
leftContainer
)
leftViewController
?
.
beginAppearanceTransition
(
!
isLeftContainerOpened
,
animated
:
true
)
addShadow
(
leftViewContainer
)
openWindow
(
)
toggleWindow
(
shouldOpen
:
true
)
}
else
if
.
Changed
==
gesture
.
state
{
let
v
:
CGPoint
=
gesture
.
translationInView
(
gesture
.
view
!
)
let
r
=
(
leftViewContainer
.
frame
.
origin
.
x
-
leftOrigin
)
/
leftViewContainer
.
frame
.
size
.
width
let
r
=
(
leftViewContainer
.
frame
.
origin
.
x
-
leftOrigin
X
)
/
leftViewContainer
.
frame
.
size
.
width
let
s
:
CGFloat
=
1
-
(
1
-
options
.
contentViewScale
)
*
r
let
x
:
CGFloat
=
leftContainer
.
frame
.
origin
.
x
+
v
.
x
leftViewContainer
.
frame
.
origin
.
x
=
x
<
leftOrigin
?
leftOrigin
:
x
>
0
?
0
:
x
leftViewContainer
.
frame
.
origin
.
x
=
x
<
leftOrigin
X
?
leftOriginX
:
x
>
0
?
0
:
x
backdropViewContainer
.
layer
.
opacity
=
Float
(
r
*
options
.
contentViewOpacity
)
mainViewContainer
.
transform
=
CGAffineTransformMakeScale
(
s
,
s
)
if
nil
!=
delegate
?
.
sideNavDidChangeLeftPan
{
...
...
@@ -544,7 +514,7 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
}
else
{
let
v
:
CGPoint
=
gesture
.
velocityInView
(
gesture
.
view
)
let
x
:
CGFloat
=
v
.
x
>=
1000
||
v
.
x
<=
-
1000
?
v
.
x
:
0
let
s
:
SideNavState
=
leftViewContainer
.
frame
.
origin
.
x
<=
CGFloat
(
floor
(
leftOrigin
))
+
options
.
pointOfNoReturnWidth
||
v
.
x
<=
-
1000
?
.
Closed
:
.
Opened
let
s
:
SideNavState
=
leftViewContainer
.
frame
.
origin
.
x
<=
CGFloat
(
floor
(
leftOrigin
X
))
+
options
.
pointOfNoReturnWidth
||
v
.
x
<=
-
1000
?
.
Closed
:
.
Opened
if
.
Closed
==
s
{
closeLeftViewContainer
(
velocity
:
x
)
}
else
{
...
...
@@ -576,15 +546,15 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
delegate
?
.
sideNavDidBeginRightPan
?(
self
,
container
:
rightContainer
)
rightViewController
?
.
beginAppearanceTransition
(
!
isRightContainerOpened
,
animated
:
true
)
addShadow
(
rightViewContainer
)
openWindow
(
)
toggleWindow
(
shouldOpen
:
true
)
}
else
if
.
Changed
==
gesture
.
state
{
let
v
:
CGPoint
=
gesture
.
translationInView
(
gesture
.
view
!
)
let
r
=
(
rightOrigin
-
rightViewContainer
.
frame
.
origin
.
x
)
/
rightViewContainer
.
frame
.
size
.
width
let
r
=
(
rightOrigin
X
-
rightViewContainer
.
frame
.
origin
.
x
)
/
rightViewContainer
.
frame
.
size
.
width
let
s
:
CGFloat
=
1
-
(
1
-
options
.
contentViewScale
)
*
r
let
m
:
CGFloat
=
rightOrigin
-
rightViewContainer
.
frame
.
size
.
width
let
m
:
CGFloat
=
rightOrigin
X
-
rightViewContainer
.
frame
.
size
.
width
let
x
:
CGFloat
=
rightContainer
.
frame
.
origin
.
x
+
gesture
.
translationInView
(
gesture
.
view
!
)
.
x
rightViewContainer
.
frame
.
origin
.
x
=
x
>
rightOrigin
?
rightOrigin
:
x
<
m
?
m
:
x
rightViewContainer
.
frame
.
origin
.
x
=
x
>
rightOrigin
X
?
rightOriginX
:
x
<
m
?
m
:
x
backdropViewContainer
.
layer
.
opacity
=
Float
(
r
*
options
.
contentViewOpacity
)
mainViewContainer
.
transform
=
CGAffineTransformMakeScale
(
s
,
s
)
if
nil
!=
delegate
?
.
sideNavDidChangeRightPan
{
...
...
@@ -593,7 +563,7 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
}
else
{
let
v
:
CGPoint
=
gesture
.
velocityInView
(
gesture
.
view
)
let
x
:
CGFloat
=
v
.
x
<=
-
1000
||
v
.
x
>=
1000
?
v
.
x
:
0
let
s
:
SideNavState
=
rightViewContainer
.
frame
.
origin
.
x
>=
CGFloat
(
floor
(
rightOrigin
)
-
options
.
pointOfNoReturnWidth
)
||
v
.
x
>=
1000
?
.
Closed
:
.
Opened
let
s
:
SideNavState
=
rightViewContainer
.
frame
.
origin
.
x
>=
CGFloat
(
floor
(
rightOrigin
X
)
-
options
.
pointOfNoReturnWidth
)
||
v
.
x
>=
1000
?
.
Closed
:
.
Opened
if
.
Closed
==
s
{
closeRightViewContainer
(
velocity
:
x
)
}
else
{
...
...
@@ -633,33 +603,16 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
}
//
// :name: openWindow
//
private
func
openWindow
()
{
if
options
.
shouldHideStatusBar
{
if
isViewBasedAppearance
{
UIApplication
.
sharedApplication
()
.
setStatusBarHidden
(
true
,
withAnimation
:
.
Slide
)
}
else
{
dispatch_async
(
dispatch_get_main_queue
(),
{
if
let
w
=
UIApplication
.
sharedApplication
()
.
keyWindow
{
w
.
windowLevel
=
UIWindowLevelStatusBar
+
1
}
})
}
}
}
//
// :name: closeWindow
// :name: toggleWindow
//
private
func
closeWindow
(
)
{
private
func
toggleWindow
(
shouldOpen
:
Bool
=
false
)
{
if
options
.
shouldHideStatusBar
{
if
isViewBasedAppearance
{
UIApplication
.
sharedApplication
()
.
setStatusBarHidden
(
false
,
withAnimation
:
.
Slide
)
UIApplication
.
sharedApplication
()
.
setStatusBarHidden
(
shouldOpen
,
withAnimation
:
.
Slide
)
}
else
{
dispatch_async
(
dispatch_get_main_queue
(),
{
if
let
w
=
UIApplication
.
sharedApplication
()
.
keyWindow
{
w
.
windowLevel
=
UIWindowLevel
Normal
w
.
windowLevel
=
UIWindowLevel
StatusBar
+
(
shouldOpen
?
1
:
0
)
}
})
}
...
...
@@ -680,14 +633,14 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
//
// :name: gesturePanLeftViewController
//
private
func
gesturePanLeftViewController
(
gesture
:
UIGestureRecognizer
,
point
:
CGPoint
)
->
Bool
{
private
func
gesturePanLeftViewController
(
gesture
:
UIGestureRecognizer
,
withTouchPoint
point
:
CGPoint
)
->
Bool
{
return
isLeftContainerOpened
||
options
.
leftPanFromBezel
&&
isLeftPointContainedWithinRect
(
point
)
}
//
// :name: isLeftPointContainedWithinRect
//
private
func
isLeftPointContainedWithinRect
(
point
:
CGPoint
)
->
Bool
{
private
func
isLeftPointContainedWithinRect
(
point
:
CGPoint
)
->
Bool
{
var
r
:
CGRect
=
CGRectZero
var
t
:
CGRect
=
CGRectZero
let
w
:
CGFloat
=
options
.
leftBezelWidth
...
...
@@ -708,26 +661,19 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
private
func
isRightPointContainedWithinRect
(
point
:
CGPoint
)
->
Bool
{
var
r
:
CGRect
=
CGRectZero
var
t
:
CGRect
=
CGRectZero
let
w
:
CGFloat
=
rightOrigin
-
options
.
rightBezelWidth
let
w
:
CGFloat
=
rightOrigin
X
-
options
.
rightBezelWidth
CGRectDivide
(
view
.
bounds
,
&
t
,
&
r
,
w
,
.
MinXEdge
)
return
CGRectContainsPoint
(
r
,
point
)
}
//
// :name: isPointContainedWithin
LeftRect
ViewController
// :name: isPointContainedWithinViewController
//
private
func
isPointContainedWithin
LeftRectViewController
(
point
:
CGPoint
)
->
Bool
{
return
CGRectContainsPoint
(
leftV
iewContainer
.
frame
,
point
)
private
func
isPointContainedWithin
ViewController
(
inout
viewContainer
:
UIView
!
,
point
:
CGPoint
)
->
Bool
{
return
CGRectContainsPoint
(
v
iewContainer
.
frame
,
point
)
}
//
// :name: isPointContainedWithinRightViewController
//
private
func
isPointContainedWithinRightViewController
(
point
:
CGPoint
)
->
Bool
{
return
CGRectContainsPoint
(
rightViewContainer
.
frame
,
point
)
}
//
// :name: prepareMainContainer
//
private
func
prepareMainContainer
()
{
...
...
@@ -749,81 +695,54 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
}
//
// :name: prepareLeftContainer
//
private
func
prepareLeftContainer
()
{
leftContainer
=
SideNavContainer
(
state
:
.
Closed
,
point
:
CGPointZero
,
frame
:
CGRectZero
)
var
b
:
CGRect
=
view
.
bounds
b
.
size
.
width
=
options
.
leftViewContainerWidth
b
.
origin
.
x
=
leftOrigin
leftViewContainer
=
UIView
(
frame
:
b
)
leftViewContainer
.
backgroundColor
=
.
clearColor
()
leftViewContainer
.
autoresizingMask
=
.
FlexibleHeight
view
.
addSubview
(
leftViewContainer
)
}
//
// :name: prepareLeftContainerToOpen
//
private
func
prepareLeftContainerToOpen
()
{
leftViewController
?
.
beginAppearanceTransition
(
!
isLeftContainerOpened
,
animated
:
true
)
addShadow
(
leftViewContainer
)
openWindow
()
}
//
// :name: prepareLeftContainerToClose
//
private
func
prepareLeftContainerToClose
()
{
leftViewController
?
.
beginAppearanceTransition
(
isLeftContainerOpened
,
animated
:
true
)
closeWindow
()
}
//
// :name: prepareLeftGestures
//
private
func
prepareLeftGestures
()
{
remove
LeftGestures
(
)
add
LeftGestures
(
)
remove
Gestures
(
&
leftPanGesture
,
tap
:
&
leftTapGesture
)
add
Gestures
(
&
leftPanGesture
,
panSelector
:
"handleLeftPanGesture:"
,
tap
:
&
leftTapGesture
,
tapSelector
:
"handleLeftTapGesture:"
)
}
//
// :name: prepare
Right
Container
// :name: prepareContainer
//
private
func
prepare
RightContainer
(
)
{
rightC
ontainer
=
SideNavContainer
(
state
:
.
Closed
,
point
:
CGPointZero
,
frame
:
CGRectZero
)
private
func
prepare
Container
(
inout
container
:
SideNavContainer
!
,
inout
viewContainer
:
UIView
!
,
originX
:
CGFloat
,
width
:
CGFloat
)
{
c
ontainer
=
SideNavContainer
(
state
:
.
Closed
,
point
:
CGPointZero
,
frame
:
CGRectZero
)
var
b
:
CGRect
=
view
.
bounds
b
.
size
.
width
=
options
.
rightViewContainerW
idth
b
.
origin
.
x
=
rightOrigin
rightV
iewContainer
=
UIView
(
frame
:
b
)
rightV
iewContainer
.
backgroundColor
=
.
clearColor
()
rightV
iewContainer
.
autoresizingMask
=
.
FlexibleHeight
view
.
addSubview
(
rightV
iewContainer
)
b
.
size
.
width
=
w
idth
b
.
origin
.
x
=
originX
v
iewContainer
=
UIView
(
frame
:
b
)
v
iewContainer
.
backgroundColor
=
.
clearColor
()
v
iewContainer
.
autoresizingMask
=
.
FlexibleHeight
view
.
addSubview
(
v
iewContainer
)
}
//
// :name: prepareRight
ContainerToOpen
// :name: prepareRight
Gestures
//
private
func
prepareRightContainerToOpen
()
{
rightViewController
?
.
beginAppearanceTransition
(
!
isRightContainerOpened
,
animated
:
true
)
addShadow
(
rightViewContainer
)
openWindow
()
private
func
prepareRightGestures
()
{
removeGestures
(
&
rightPanGesture
,
tap
:
&
rightTapGesture
)
addGestures
(
&
rightPanGesture
,
panSelector
:
"handleRightPanGesture:"
,
tap
:
&
rightTapGesture
,
tapSelector
:
"handleRightTapGesture:"
)
}
//
// :name: prepare
RightContainerToClose
// :name: prepare
ContainerToOpen
//
private
func
prepareRightContainerToClose
()
{
rightViewController
?
.
beginAppearanceTransition
(
isRightContainerOpened
,
animated
:
true
)
closeWindow
()
private
func
prepareContainerToOpen
(
inout
viewController
:
UIViewController
?,
inout
viewContainer
:
UIView
!
,
state
:
SideNavState
)
{
if
let
vc
=
viewController
{
vc
.
beginAppearanceTransition
(
.
Opened
==
state
,
animated
:
true
)
addShadow
(
viewContainer
)
toggleWindow
(
shouldOpen
:
true
)
}
}
//
// :name: prepare
RightGestures
// :name: prepare
ContainerToClose
//
private
func
prepareRightGestures
()
{
removeRightGestures
()
addRightGestures
()
private
func
prepareContainerToClose
(
inout
viewController
:
UIViewController
?,
state
:
SideNavState
)
{
if
let
vc
=
viewController
{
vc
.
beginAppearanceTransition
(
.
Opened
==
state
,
animated
:
true
)
toggleWindow
()
}
}
//
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment