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
2b49143c
Commit
2b49143c
authored
Aug 26, 2015
by
Daniel Dahan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
refactored SideNav
parent
07e11946
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 @
2b49143c
...
@@ -104,7 +104,7 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
...
@@ -104,7 +104,7 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
:name: isRightContainerOpened
:name: isRightContainerOpened
*/
*/
public
var
isRightContainerOpened
:
Bool
{
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
...
@@ -170,9 +170,9 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
public
var
leftPanGesture
:
UIPanGestureRecognizer
?
public
var
leftPanGesture
:
UIPanGestureRecognizer
?
/**
/**
:name: leftTapGe
t
sture
:name: leftTapGesture
*/
*/
public
var
leftTapGe
t
sture
:
UITapGestureRecognizer
?
public
var
leftTapGesture
:
UITapGestureRecognizer
?
/**
/**
:name: rightPanGesture
:name: rightPanGesture
...
@@ -186,16 +186,16 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
...
@@ -186,16 +186,16 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
public
var
rightTapGesture
:
UITapGestureRecognizer
?
public
var
rightTapGesture
:
UITapGestureRecognizer
?
//
//
// :name: leftOrigin
// :name: leftOrigin
X
//
//
private
var
leftOrigin
:
CGFloat
{
private
var
leftOrigin
X
:
CGFloat
{
return
-
options
.
leftViewContainerWidth
return
-
options
.
leftViewContainerWidth
}
}
//
//
// :name: rightOrigin
// :name: rightOrigin
X
//
//
private
var
rightOrigin
:
CGFloat
{
private
var
rightOrigin
X
:
CGFloat
{
return
view
.
bounds
.
width
return
view
.
bounds
.
width
}
}
...
@@ -270,17 +270,17 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
...
@@ -270,17 +270,17 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
leftViewContainer
.
hidden
=
true
leftViewContainer
.
hidden
=
true
rightViewContainer
.
hidden
=
true
rightViewContainer
.
hidden
=
true
coordinator
.
animateAlongsideTransition
(
nil
)
{
_
in
coordinator
.
animateAlongsideTransition
(
nil
)
{
_
in
self
.
clos
eWindow
()
self
.
toggl
eWindow
()
self
.
backdropViewContainer
.
layer
.
opacity
=
0
self
.
backdropViewContainer
.
layer
.
opacity
=
0
self
.
mainViewContainer
.
transform
=
CGAffineTransformMakeScale
(
1
,
1
)
self
.
mainViewContainer
.
transform
=
CGAffineTransformMakeScale
(
1
,
1
)
self
.
isUserInteractionEnabled
=
true
self
.
isUserInteractionEnabled
=
true
self
.
leftViewContainer
.
frame
.
origin
.
x
=
self
.
leftOrigin
self
.
leftViewContainer
.
frame
.
origin
.
x
=
self
.
leftOrigin
X
self
.
leftViewContainer
.
hidden
=
false
self
.
leftViewContainer
.
hidden
=
false
self
.
removeShadow
(
self
.
leftViewContainer
)
self
.
removeShadow
(
self
.
leftViewContainer
)
self
.
prepareLeftGestures
()
self
.
prepareLeftGestures
()
self
.
rightViewContainer
.
frame
.
origin
.
x
=
self
.
rightOrigin
self
.
rightViewContainer
.
frame
.
origin
.
x
=
self
.
rightOrigin
X
self
.
rightViewContainer
.
hidden
=
false
self
.
rightViewContainer
.
hidden
=
false
self
.
removeShadow
(
self
.
rightViewContainer
)
self
.
removeShadow
(
self
.
rightViewContainer
)
self
.
prepareRightGestures
()
self
.
prepareRightGestures
()
...
@@ -305,7 +305,7 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
...
@@ -305,7 +305,7 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
:name: openLeftViewContainer
:name: openLeftViewContainer
*/
*/
public
func
openLeftViewContainer
(
velocity
:
CGFloat
=
0
)
{
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
)))),
UIView
.
animateWithDuration
(
Double
(
0
==
velocity
?
options
.
animationDuration
:
fmax
(
0.1
,
fmin
(
1
,
Double
(
leftViewContainer
.
frame
.
origin
.
x
/
velocity
)))),
delay
:
0
,
delay
:
0
,
options
:
.
CurveEaseInOut
,
options
:
.
CurveEaseInOut
,
...
@@ -326,12 +326,12 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
...
@@ -326,12 +326,12 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
:name: openRightViewContainer
:name: openRightViewContainer
*/
*/
public
func
openRightViewContainer
(
velocity
:
CGFloat
=
0
)
{
public
func
openRightViewContainer
(
velocity
:
CGFloat
=
0
)
{
prepare
RightContainerToOpen
(
)
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
)
/
velocity
)))),
UIView
.
animateWithDuration
(
Double
(
0
==
velocity
?
options
.
animationDuration
:
fmax
(
0.1
,
fmin
(
1
,
Double
(
fabs
(
rightViewContainer
.
frame
.
origin
.
x
-
rightOrigin
X
)
/
velocity
)))),
delay
:
0
,
delay
:
0
,
options
:
.
CurveEaseInOut
,
options
:
.
CurveEaseInOut
,
animations
:
{
_
in
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
.
backdropViewContainer
.
layer
.
opacity
=
Float
(
options
.
contentViewOpacity
)
self
.
mainViewContainer
.
transform
=
CGAffineTransformMakeScale
(
options
.
contentViewScale
,
options
.
contentViewScale
)
self
.
mainViewContainer
.
transform
=
CGAffineTransformMakeScale
(
options
.
contentViewScale
,
options
.
contentViewScale
)
}
}
...
@@ -347,12 +347,12 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
...
@@ -347,12 +347,12 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
:name: closeLeftViewContainer
:name: closeLeftViewContainer
*/
*/
public
func
closeLeftViewContainer
(
velocity
:
CGFloat
=
0
)
{
public
func
closeLeftViewContainer
(
velocity
:
CGFloat
=
0
)
{
prepare
LeftContainerToClose
(
)
prepare
ContainerToClose
(
&
leftViewController
,
state
:
leftContainer
.
state
)
UIView
.
animateWithDuration
(
Double
(
0
==
velocity
?
options
.
animationDuration
:
fmax
(
0.1
,
fmin
(
1
,
fabs
(
leftViewContainer
.
frame
.
origin
.
x
-
leftOrigin
)
/
velocity
))),
UIView
.
animateWithDuration
(
Double
(
0
==
velocity
?
options
.
animationDuration
:
fmax
(
0.1
,
fmin
(
1
,
fabs
(
leftViewContainer
.
frame
.
origin
.
x
-
leftOrigin
X
)
/
velocity
))),
delay
:
0
,
delay
:
0
,
options
:
.
CurveEaseInOut
,
options
:
.
CurveEaseInOut
,
animations
:
{
_
in
animations
:
{
_
in
self
.
leftViewContainer
.
frame
.
origin
.
x
=
self
.
leftOrigin
self
.
leftViewContainer
.
frame
.
origin
.
x
=
self
.
leftOrigin
X
self
.
backdropViewContainer
.
layer
.
opacity
=
0
self
.
backdropViewContainer
.
layer
.
opacity
=
0
self
.
mainViewContainer
.
transform
=
CGAffineTransformMakeScale
(
1
,
1
)
self
.
mainViewContainer
.
transform
=
CGAffineTransformMakeScale
(
1
,
1
)
}
}
...
@@ -369,12 +369,12 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
...
@@ -369,12 +369,12 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
:name: closeRightViewContainer
:name: closeRightViewContainer
*/
*/
public
func
closeRightViewContainer
(
velocity
:
CGFloat
=
0
)
{
public
func
closeRightViewContainer
(
velocity
:
CGFloat
=
0
)
{
prepare
RightContainerToClose
(
)
prepare
ContainerToClose
(
&
rightViewController
,
state
:
rightContainer
.
state
)
UIView
.
animateWithDuration
(
Double
(
0
==
velocity
?
options
.
animationDuration
:
fmax
(
0.1
,
fmin
(
1
,
fabs
(
rightViewContainer
.
frame
.
origin
.
x
-
rightOrigin
)
/
velocity
))),
UIView
.
animateWithDuration
(
Double
(
0
==
velocity
?
options
.
animationDuration
:
fmax
(
0.1
,
fmin
(
1
,
fabs
(
rightViewContainer
.
frame
.
origin
.
x
-
rightOrigin
X
)
/
velocity
))),
delay
:
0
,
delay
:
0
,
options
:
.
CurveEaseInOut
,
options
:
.
CurveEaseInOut
,
animations
:
{
_
in
animations
:
{
_
in
self
.
rightViewContainer
.
frame
.
origin
.
x
=
self
.
rightOrigin
self
.
rightViewContainer
.
frame
.
origin
.
x
=
self
.
rightOrigin
X
self
.
backdropViewContainer
.
layer
.
opacity
=
0
self
.
backdropViewContainer
.
layer
.
opacity
=
0
self
.
mainViewContainer
.
transform
=
CGAffineTransformMakeScale
(
1
,
1
)
self
.
mainViewContainer
.
transform
=
CGAffineTransformMakeScale
(
1
,
1
)
}
}
...
@@ -429,16 +429,16 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
...
@@ -429,16 +429,16 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
//
//
public
func
gestureRecognizer
(
gestureRecognizer
:
UIGestureRecognizer
,
shouldReceiveTouch
touch
:
UITouch
)
->
Bool
{
public
func
gestureRecognizer
(
gestureRecognizer
:
UIGestureRecognizer
,
shouldReceiveTouch
touch
:
UITouch
)
->
Bool
{
if
gestureRecognizer
==
leftPanGesture
{
if
gestureRecognizer
==
leftPanGesture
{
return
gesturePanLeftViewController
(
gestureRecognizer
,
p
oint
:
touch
.
locationInView
(
view
))
return
gesturePanLeftViewController
(
gestureRecognizer
,
withTouchP
oint
:
touch
.
locationInView
(
view
))
}
}
if
gestureRecognizer
==
rightPanGesture
{
if
gestureRecognizer
==
rightPanGesture
{
return
gesturePanRightViewController
(
gestureRecognizer
,
withTouchPoint
:
touch
.
locationInView
(
view
))
return
gesturePanRightViewController
(
gestureRecognizer
,
withTouchPoint
:
touch
.
locationInView
(
view
))
}
}
if
gestureRecognizer
==
leftTapGe
t
sture
{
if
gestureRecognizer
==
leftTapGesture
{
return
isLeftContainerOpened
&&
!
isPointContainedWithin
LeftRectViewController
(
touch
.
locationInView
(
view
))
return
isLeftContainerOpened
&&
!
isPointContainedWithin
ViewController
(
&
leftViewContainer
,
point
:
touch
.
locationInView
(
view
))
}
}
if
gestureRecognizer
==
rightTapGesture
{
if
gestureRecognizer
==
rightTapGesture
{
return
isRightContainerOpened
&&
!
isPointContainedWithin
RightViewController
(
touch
.
locationInView
(
view
))
return
isRightContainerOpened
&&
!
isPointContainedWithin
ViewController
(
&
rightViewContainer
,
point
:
touch
.
locationInView
(
view
))
}
}
return
true
return
true
}
}
...
@@ -450,70 +450,40 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
...
@@ -450,70 +450,40 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
prepareMainContainer
()
prepareMainContainer
()
prepareBackdropContainer
()
prepareBackdropContainer
()
prepare
LeftContainer
(
)
prepare
Container
(
&
leftContainer
,
viewContainer
:
&
leftViewContainer
,
originX
:
leftOriginX
,
width
:
options
.
leftViewContainerWidth
)
prepareLeftGestures
()
prepareLeftGestures
()
prepare
RightContainer
(
)
prepare
Container
(
&
rightContainer
,
viewContainer
:
&
rightViewContainer
,
originX
:
rightOriginX
,
width
:
options
.
rightViewContainerWidth
)
prepareRightGestures
()
prepareRightGestures
()
}
}
//
//
// :name: add
Left
Gestures
// :name: addGestures
//
//
private
func
addLeftGestures
(
)
{
private
func
addGestures
(
inout
pan
:
UIPanGestureRecognizer
?,
panSelector
:
Selector
,
inout
tap
:
UITapGestureRecognizer
?,
tapSelector
:
Selector
)
{
if
nil
==
leftPanGesture
{
if
nil
==
pan
{
leftPanGesture
=
UIPanGestureRecognizer
(
target
:
self
,
action
:
"handleLeftPanGesture:"
)
pan
=
UIPanGestureRecognizer
(
target
:
self
,
action
:
panSelector
)
leftPanGesture
!.
delegate
=
self
pan
!.
delegate
=
self
view
.
addGestureRecognizer
(
leftPanGesture
!
)
view
.
addGestureRecognizer
(
pan
!
)
}
}
if
nil
==
leftTapGetsture
{
if
nil
==
tap
{
leftTapGetsture
=
UITapGestureRecognizer
(
target
:
self
,
action
:
"handleLeftTapGesture:"
)
tap
=
UITapGestureRecognizer
(
target
:
self
,
action
:
tapSelector
)
leftTapGetsture
!.
delegate
=
self
tap
!.
delegate
=
self
view
.
addGestureRecognizer
(
leftTapGetsture
!
)
view
.
addGestureRecognizer
(
tap
!
)
}
}
}
}
//
//
// :name:
addRight
Gestures
// :name:
remove
Gestures
//
//
private
func
addRightGestures
()
{
private
func
removeGestures
(
inout
pan
:
UIPanGestureRecognizer
?,
inout
tap
:
UITapGestureRecognizer
?)
{
if
nil
==
rightPanGesture
{
if
let
g
=
pan
{
rightPanGesture
=
UIPanGestureRecognizer
(
target
:
self
,
action
:
"handleRightPanGesture:"
)
view
.
removeGestureRecognizer
(
g
)
rightPanGesture
!.
delegate
=
self
pan
=
nil
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
}
}
if
let
l
=
leftTapGetsture
{
if
let
g
=
tap
{
view
.
removeGestureRecognizer
(
l
)
view
.
removeGestureRecognizer
(
g
)
leftTapGetsture
=
nil
tap
=
nil
}
}
//
// :name: removeRightGestures
//
private
func
removeRightGestures
()
{
if
let
r
=
rightPanGesture
{
view
.
removeGestureRecognizer
(
r
)
rightPanGesture
=
nil
}
if
let
r
=
rightTapGesture
{
view
.
removeGestureRecognizer
(
r
)
rightTapGesture
=
nil
}
}
}
}
...
@@ -529,13 +499,13 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
...
@@ -529,13 +499,13 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
delegate
?
.
sideNavDidBeginLeftPan
?(
self
,
container
:
leftContainer
)
delegate
?
.
sideNavDidBeginLeftPan
?(
self
,
container
:
leftContainer
)
leftViewController
?
.
beginAppearanceTransition
(
!
isLeftContainerOpened
,
animated
:
true
)
leftViewController
?
.
beginAppearanceTransition
(
!
isLeftContainerOpened
,
animated
:
true
)
addShadow
(
leftViewContainer
)
addShadow
(
leftViewContainer
)
openWindow
(
)
toggleWindow
(
shouldOpen
:
true
)
}
else
if
.
Changed
==
gesture
.
state
{
}
else
if
.
Changed
==
gesture
.
state
{
let
v
:
CGPoint
=
gesture
.
translationInView
(
gesture
.
view
!
)
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
s
:
CGFloat
=
1
-
(
1
-
options
.
contentViewScale
)
*
r
let
x
:
CGFloat
=
leftContainer
.
frame
.
origin
.
x
+
v
.
x
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
)
backdropViewContainer
.
layer
.
opacity
=
Float
(
r
*
options
.
contentViewOpacity
)
mainViewContainer
.
transform
=
CGAffineTransformMakeScale
(
s
,
s
)
mainViewContainer
.
transform
=
CGAffineTransformMakeScale
(
s
,
s
)
if
nil
!=
delegate
?
.
sideNavDidChangeLeftPan
{
if
nil
!=
delegate
?
.
sideNavDidChangeLeftPan
{
...
@@ -544,7 +514,7 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
...
@@ -544,7 +514,7 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
}
else
{
}
else
{
let
v
:
CGPoint
=
gesture
.
velocityInView
(
gesture
.
view
)
let
v
:
CGPoint
=
gesture
.
velocityInView
(
gesture
.
view
)
let
x
:
CGFloat
=
v
.
x
>=
1000
||
v
.
x
<=
-
1000
?
v
.
x
:
0
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
{
if
.
Closed
==
s
{
closeLeftViewContainer
(
velocity
:
x
)
closeLeftViewContainer
(
velocity
:
x
)
}
else
{
}
else
{
...
@@ -576,15 +546,15 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
...
@@ -576,15 +546,15 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
delegate
?
.
sideNavDidBeginRightPan
?(
self
,
container
:
rightContainer
)
delegate
?
.
sideNavDidBeginRightPan
?(
self
,
container
:
rightContainer
)
rightViewController
?
.
beginAppearanceTransition
(
!
isRightContainerOpened
,
animated
:
true
)
rightViewController
?
.
beginAppearanceTransition
(
!
isRightContainerOpened
,
animated
:
true
)
addShadow
(
rightViewContainer
)
addShadow
(
rightViewContainer
)
openWindow
(
)
toggleWindow
(
shouldOpen
:
true
)
}
else
if
.
Changed
==
gesture
.
state
{
}
else
if
.
Changed
==
gesture
.
state
{
let
v
:
CGPoint
=
gesture
.
translationInView
(
gesture
.
view
!
)
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
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
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
)
backdropViewContainer
.
layer
.
opacity
=
Float
(
r
*
options
.
contentViewOpacity
)
mainViewContainer
.
transform
=
CGAffineTransformMakeScale
(
s
,
s
)
mainViewContainer
.
transform
=
CGAffineTransformMakeScale
(
s
,
s
)
if
nil
!=
delegate
?
.
sideNavDidChangeRightPan
{
if
nil
!=
delegate
?
.
sideNavDidChangeRightPan
{
...
@@ -593,7 +563,7 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
...
@@ -593,7 +563,7 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
}
else
{
}
else
{
let
v
:
CGPoint
=
gesture
.
velocityInView
(
gesture
.
view
)
let
v
:
CGPoint
=
gesture
.
velocityInView
(
gesture
.
view
)
let
x
:
CGFloat
=
v
.
x
<=
-
1000
||
v
.
x
>=
1000
?
v
.
x
:
0
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
{
if
.
Closed
==
s
{
closeRightViewContainer
(
velocity
:
x
)
closeRightViewContainer
(
velocity
:
x
)
}
else
{
}
else
{
...
@@ -633,33 +603,16 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
...
@@ -633,33 +603,16 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
}
}
//
//
// :name: openWindow
// :name: toggleWindow
//
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
//
//
private
func
closeWindow
(
)
{
private
func
toggleWindow
(
shouldOpen
:
Bool
=
false
)
{
if
options
.
shouldHideStatusBar
{
if
options
.
shouldHideStatusBar
{
if
isViewBasedAppearance
{
if
isViewBasedAppearance
{
UIApplication
.
sharedApplication
()
.
setStatusBarHidden
(
false
,
withAnimation
:
.
Slide
)
UIApplication
.
sharedApplication
()
.
setStatusBarHidden
(
shouldOpen
,
withAnimation
:
.
Slide
)
}
else
{
}
else
{
dispatch_async
(
dispatch_get_main_queue
(),
{
dispatch_async
(
dispatch_get_main_queue
(),
{
if
let
w
=
UIApplication
.
sharedApplication
()
.
keyWindow
{
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
...
@@ -680,14 +633,14 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
//
//
// :name: gesturePanLeftViewController
// :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
)
return
isLeftContainerOpened
||
options
.
leftPanFromBezel
&&
isLeftPointContainedWithinRect
(
point
)
}
}
//
//
// :name: isLeftPointContainedWithinRect
// :name: isLeftPointContainedWithinRect
//
//
private
func
isLeftPointContainedWithinRect
(
point
:
CGPoint
)
->
Bool
{
private
func
isLeftPointContainedWithinRect
(
point
:
CGPoint
)
->
Bool
{
var
r
:
CGRect
=
CGRectZero
var
r
:
CGRect
=
CGRectZero
var
t
:
CGRect
=
CGRectZero
var
t
:
CGRect
=
CGRectZero
let
w
:
CGFloat
=
options
.
leftBezelWidth
let
w
:
CGFloat
=
options
.
leftBezelWidth
...
@@ -708,26 +661,19 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
...
@@ -708,26 +661,19 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
private
func
isRightPointContainedWithinRect
(
point
:
CGPoint
)
->
Bool
{
private
func
isRightPointContainedWithinRect
(
point
:
CGPoint
)
->
Bool
{
var
r
:
CGRect
=
CGRectZero
var
r
:
CGRect
=
CGRectZero
var
t
:
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
)
CGRectDivide
(
view
.
bounds
,
&
t
,
&
r
,
w
,
.
MinXEdge
)
return
CGRectContainsPoint
(
r
,
point
)
return
CGRectContainsPoint
(
r
,
point
)
}
}
//
//
// :name: isPointContainedWithin
LeftRect
ViewController
// :name: isPointContainedWithinViewController
//
//
private
func
isPointContainedWithin
LeftRectViewController
(
point
:
CGPoint
)
->
Bool
{
private
func
isPointContainedWithin
ViewController
(
inout
viewContainer
:
UIView
!
,
point
:
CGPoint
)
->
Bool
{
return
CGRectContainsPoint
(
leftV
iewContainer
.
frame
,
point
)
return
CGRectContainsPoint
(
v
iewContainer
.
frame
,
point
)
}
}
//
//
// :name: isPointContainedWithinRightViewController
//
private
func
isPointContainedWithinRightViewController
(
point
:
CGPoint
)
->
Bool
{
return
CGRectContainsPoint
(
rightViewContainer
.
frame
,
point
)
}
//
// :name: prepareMainContainer
// :name: prepareMainContainer
//
//
private
func
prepareMainContainer
()
{
private
func
prepareMainContainer
()
{
...
@@ -749,81 +695,54 @@ public class SideNavController: MaterialViewController, UIGestureRecognizerDeleg
...
@@ -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
// :name: prepareLeftGestures
//
//
private
func
prepareLeftGestures
()
{
private
func
prepareLeftGestures
()
{
remove
LeftGestures
(
)
remove
Gestures
(
&
leftPanGesture
,
tap
:
&
leftTapGesture
)
add
LeftGestures
(
)
add
Gestures
(
&
leftPanGesture
,
panSelector
:
"handleLeftPanGesture:"
,
tap
:
&
leftTapGesture
,
tapSelector
:
"handleLeftTapGesture:"
)
}
}
//
//
// :name: prepare
Right
Container
// :name: prepareContainer
//
//
private
func
prepare
RightContainer
(
)
{
private
func
prepare
Container
(
inout
container
:
SideNavContainer
!
,
inout
viewContainer
:
UIView
!
,
originX
:
CGFloat
,
width
:
CGFloat
)
{
rightC
ontainer
=
SideNavContainer
(
state
:
.
Closed
,
point
:
CGPointZero
,
frame
:
CGRectZero
)
c
ontainer
=
SideNavContainer
(
state
:
.
Closed
,
point
:
CGPointZero
,
frame
:
CGRectZero
)
var
b
:
CGRect
=
view
.
bounds
var
b
:
CGRect
=
view
.
bounds
b
.
size
.
width
=
options
.
rightViewContainerW
idth
b
.
size
.
width
=
w
idth
b
.
origin
.
x
=
rightOrigin
b
.
origin
.
x
=
originX
rightV
iewContainer
=
UIView
(
frame
:
b
)
v
iewContainer
=
UIView
(
frame
:
b
)
rightV
iewContainer
.
backgroundColor
=
.
clearColor
()
v
iewContainer
.
backgroundColor
=
.
clearColor
()
rightV
iewContainer
.
autoresizingMask
=
.
FlexibleHeight
v
iewContainer
.
autoresizingMask
=
.
FlexibleHeight
view
.
addSubview
(
rightV
iewContainer
)
view
.
addSubview
(
v
iewContainer
)
}
}
//
//
// :name: prepareRight
ContainerToOpen
// :name: prepareRight
Gestures
//
//
private
func
prepareRightContainerToOpen
()
{
private
func
prepareRightGestures
()
{
rightViewController
?
.
beginAppearanceTransition
(
!
isRightContainerOpened
,
animated
:
true
)
removeGestures
(
&
rightPanGesture
,
tap
:
&
rightTapGesture
)
addShadow
(
rightViewContainer
)
addGestures
(
&
rightPanGesture
,
panSelector
:
"handleRightPanGesture:"
,
tap
:
&
rightTapGesture
,
tapSelector
:
"handleRightTapGesture:"
)
openWindow
()
}
}
//
//
// :name: prepare
RightContainerToClose
// :name: prepare
ContainerToOpen
//
//
private
func
prepareRightContainerToClose
()
{
private
func
prepareContainerToOpen
(
inout
viewController
:
UIViewController
?,
inout
viewContainer
:
UIView
!
,
state
:
SideNavState
)
{
rightViewController
?
.
beginAppearanceTransition
(
isRightContainerOpened
,
animated
:
true
)
if
let
vc
=
viewController
{
closeWindow
()
vc
.
beginAppearanceTransition
(
.
Opened
==
state
,
animated
:
true
)
addShadow
(
viewContainer
)
toggleWindow
(
shouldOpen
:
true
)
}
}
}
//
//
// :name: prepare
RightGestures
// :name: prepare
ContainerToClose
//
//
private
func
prepareRightGestures
()
{
private
func
prepareContainerToClose
(
inout
viewController
:
UIViewController
?,
state
:
SideNavState
)
{
removeRightGestures
()
if
let
vc
=
viewController
{
addRightGestures
()
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