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
f7cd058c
Commit
f7cd058c
authored
Oct 17, 2015
by
Daniel Dahan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
SideNavigationViewController working
parent
4c60c25c
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
69 additions
and
66 deletions
+69
-66
Source/SideNavigationViewController.swift
+69
-66
No files found.
Source/SideNavigationViewController.swift
View file @
f7cd058c
...
...
@@ -41,16 +41,6 @@ public class SideNavigationViewController: UIViewController, UIGestureRecognizer
//
private
var
originalPosition
:
CGPoint
!
//
// :name: enabled
//
public
lazy
var
enabled
:
Bool
=
true
/**
:name: hideStatusBar
*/
public
lazy
var
hideStatusBar
:
Bool
=
true
/**
:name: horizontalThreshold
*/
...
...
@@ -61,6 +51,16 @@ public class SideNavigationViewController: UIViewController, UIGestureRecognizer
*/
public
static
let
animationDuration
:
CGFloat
=
0.25
//
// :name: enabled
//
public
lazy
var
enabled
:
Bool
=
true
/**
:name: hideStatusBar
*/
public
lazy
var
hideStatusBar
:
Bool
=
true
/**
:name: backdropLayer
*/
...
...
@@ -95,8 +95,8 @@ public class SideNavigationViewController: UIViewController, UIGestureRecognizer
:name: isLeftContainerOpened
*/
public
var
isLeftContainerOpened
:
Bool
{
if
let
c
=
leftView
{
return
c
.
frame
.
origin
.
x
!=
leftOriginX
if
let
v
=
leftView
{
return
v
.
x
!=
leftOriginX
}
return
false
}
...
...
@@ -106,10 +106,10 @@ public class SideNavigationViewController: UIViewController, UIGestureRecognizer
*/
public
private(set)
var
isUserInteractionEnabled
:
Bool
{
get
{
return
view
.
userInteractionEnabled
return
mainViewController
!.
view
.
userInteractionEnabled
}
set
(
value
)
{
view
.
userInteractionEnabled
=
value
mainViewController
!.
view
.
userInteractionEnabled
=
value
}
}
...
...
@@ -119,14 +119,14 @@ public class SideNavigationViewController: UIViewController, UIGestureRecognizer
public
private(set)
var
leftView
:
MaterialView
?
/**
:name:
lef
tViewController
:name:
main
tViewController
*/
public
var
left
ViewController
:
UIViewController
?
public
var
main
ViewController
:
UIViewController
?
/**
:name: left
Animation
:name: left
ViewController
*/
p
rivate
var
leftAnimation
:
CAAnimation
?
p
ublic
var
leftViewController
:
UIViewController
?
/**
:name: leftPanGesture
...
...
@@ -162,17 +162,12 @@ public class SideNavigationViewController: UIViewController, UIGestureRecognizer
/**
:name: init
*/
public
init
()
{
super
.
init
(
nibName
:
nil
,
bundle
:
nil
)
prepareView
()
}
/**
:name: init
*/
public
convenience
init
(
leftViewController
:
UIViewController
)
{
public
convenience
init
(
mainViewController
:
UIViewController
,
leftViewController
:
UIViewController
)
{
self
.
init
()
self
.
mainViewController
=
mainViewController
self
.
leftViewController
=
leftViewController
prepareView
()
prepareMainView
()
prepareLeftView
()
}
...
...
@@ -233,13 +228,16 @@ public class SideNavigationViewController: UIViewController, UIGestureRecognizer
// :name: gestureRecognizer
//
public
func
gestureRecognizer
(
gestureRecognizer
:
UIGestureRecognizer
,
shouldReceiveTouch
touch
:
UITouch
)
->
Bool
{
if
!
enabled
{
return
false
}
if
gestureRecognizer
==
leftPanGesture
{
return
gesturePanLeftViewController
(
gestureRecognizer
,
withTouchPoint
:
touch
.
locationInView
(
view
))
}
if
gestureRecognizer
==
leftTapGesture
{
return
isLeftContainerOpened
&&
!
isPointContainedWithinViewController
(
&
leftView
,
point
:
touch
.
locationInView
(
view
))
return
isLeftContainerOpened
&&
!
isPointContainedWithinViewController
(
leftView
!
,
point
:
touch
.
locationInView
(
view
))
}
return
tru
e
return
fals
e
}
//
...
...
@@ -251,30 +249,27 @@ public class SideNavigationViewController: UIViewController, UIGestureRecognizer
}
//
// :name: prepareMainView
//
internal
func
prepareMainView
()
{
prepareViewControllerWithinContainer
(
mainViewController
!
,
container
:
view
)
}
//
// :name: prepareLeftView
//
internal
func
prepareLeftView
()
{
let
w
:
CGFloat
=
view
.
frame
.
width
let
h
:
CGFloat
=
view
.
frame
.
height
// container
leftView
=
MaterialView
()
leftView
!.
translatesAutoresizingMaskIntoConstraints
=
false
leftView
=
MaterialView
(
frame
:
CGRectMake
(
0
,
0
,
240
,
view
.
frame
.
height
))
view
.
addSubview
(
leftView
!
)
MaterialLayout
.
alignToParentVertically
(
view
,
child
:
leftView
!
)
MaterialLayout
.
width
(
view
,
child
:
leftView
!
,
width
:
240
)
MaterialAnimation
.
animationDisabled
({
self
.
leftView
!.
position
=
CGPointMake
(
-
w
/
2
,
h
/
2
)
self
.
leftView
!.
position
=
CGPointMake
(
-
self
.
leftView
!.
width
/
2
,
self
.
leftView
!.
height
/
2
)
self
.
leftView
!.
zPosition
=
1000
self
.
leftView
!.
masksToBounds
=
true
})
// viewController
addChildViewController
(
leftViewController
!
)
leftView
!.
addSubview
(
leftViewController
!.
view
)
leftViewController
!.
didMoveToParentViewController
(
self
)
MaterialLayout
.
alignToParent
(
leftView
!
,
child
:
leftViewController
!.
view
)
prepareViewControllerWithinContainer
(
leftViewController
!
,
container
:
leftView
!
)
// gestures
prepareLeftGestures
()
...
...
@@ -314,25 +309,25 @@ public class SideNavigationViewController: UIViewController, UIGestureRecognizer
// :name: handleLeftPanGesture
//
internal
func
handleLeftPanGesture
(
recognizer
:
UIPanGestureRecognizer
)
{
if
let
v
c
=
leftView
{
if
let
v
=
leftView
{
switch
recognizer
.
state
{
case
.
Began
:
originalPosition
=
v
c
.
position
originalPosition
=
v
.
position
toggleStatusBar
(
true
)
SideNavigationViewController
.
backdropLayer
.
hidden
=
false
case
.
Changed
:
let
translation
:
CGPoint
=
recognizer
.
translationInView
(
v
c
)
let
w
:
CGFloat
=
v
c
.
width
let
translation
:
CGPoint
=
recognizer
.
translationInView
(
v
)
let
w
:
CGFloat
=
v
.
width
MaterialAnimation
.
animationDisabled
({
v
c
.
position
.
x
=
self
.
originalPosition
.
x
+
translation
.
x
>
(
w
/
2
)
?
(
w
/
2
)
:
self
.
originalPosition
.
x
+
translation
.
x
v
.
position
.
x
=
self
.
originalPosition
.
x
+
translation
.
x
>
(
w
/
2
)
?
(
w
/
2
)
:
self
.
originalPosition
.
x
+
translation
.
x
})
case
.
Ended
:
// snap back
let
translation
:
CGPoint
=
recognizer
.
translationInView
(
vc
)
if
SideNavigationViewController
.
horizontalThreshold
<=
translation
.
x
{
openLeftViewContainer
(
recognizer
.
velocityInView
(
view
)
.
x
)
let
point
:
CGPoint
=
recognizer
.
velocityInView
(
recognizer
.
view
)
let
x
:
CGFloat
=
point
.
x
>=
1000
||
point
.
x
<=
-
1000
?
point
.
x
:
0
if
v
.
x
<=
CGFloat
(
floor
(
leftOriginX
))
+
SideNavigationViewController
.
horizontalThreshold
||
point
.
x
<=
-
1000
{
closeLeftViewContainer
(
x
)
}
else
{
closeLeftViewContainer
(
recognizer
.
velocityInView
(
view
)
.
x
)
openLeftViewContainer
(
x
)
}
default
:
break
}
...
...
@@ -342,8 +337,10 @@ public class SideNavigationViewController: UIViewController, UIGestureRecognizer
//
// :name: handleLeftTapGesture
//
internal
func
handleLeftTapGesture
(
gesture
:
UIPanGestureRecognizer
)
{
closeLeftViewContainer
()
internal
func
handleLeftTapGesture
(
recognizer
:
UIPanGestureRecognizer
)
{
if
let
_
=
leftView
{
closeLeftViewContainer
()
}
}
//
...
...
@@ -366,12 +363,10 @@ public class SideNavigationViewController: UIViewController, UIGestureRecognizer
//
// :name: removeViewController
//
private
func
removeViewController
(
inout
viewController
:
UIViewController
?)
{
if
let
vc
=
viewController
{
vc
.
willMoveToParentViewController
(
nil
)
vc
.
view
.
removeFromSuperview
()
vc
.
removeFromParentViewController
()
}
private
func
removeViewController
(
controller
:
UIViewController
)
{
controller
.
willMoveToParentViewController
(
nil
)
controller
.
view
.
removeFromSuperview
()
controller
.
removeFromParentViewController
()
}
//
...
...
@@ -385,17 +380,14 @@ public class SideNavigationViewController: UIViewController, UIGestureRecognizer
// :name: isLeftPointContainedWithinRect
//
private
func
isLeftPointContainedWithinRect
(
point
:
CGPoint
)
->
Bool
{
return
CGRectContainsPoint
(
CGRectMake
(
0
,
0
,
64
,
view
.
frame
.
height
),
point
)
return
CGRectContainsPoint
(
CGRectMake
(
0
,
0
,
SideNavigationViewController
.
horizontalThreshold
,
view
.
frame
.
height
),
point
)
}
//
// :name: isPointContainedWithinViewController
//
private
func
isPointContainedWithinViewController
(
inout
viewContainer
:
MaterialView
?,
point
:
CGPoint
)
->
Bool
{
if
let
vc
=
viewContainer
{
return
CGRectContainsPoint
(
vc
.
frame
,
point
)
}
return
false
private
func
isPointContainedWithinViewController
(
container
:
UIView
,
point
:
CGPoint
)
->
Bool
{
return
CGRectContainsPoint
(
container
.
frame
,
point
)
}
//
...
...
@@ -411,6 +403,17 @@ public class SideNavigationViewController: UIViewController, UIGestureRecognizer
}
//
// :name: prepareViewControllerWithinContainer
//
private
func
prepareViewControllerWithinContainer
(
controller
:
UIViewController
,
container
:
UIView
)
{
controller
.
view
.
translatesAutoresizingMaskIntoConstraints
=
false
addChildViewController
(
controller
)
container
.
addSubview
(
controller
.
view
)
controller
.
didMoveToParentViewController
(
self
)
MaterialLayout
.
alignToParent
(
container
,
child
:
controller
.
view
)
}
//
// :name: prepareLeftGestures
//
private
func
prepareLeftGestures
()
{
...
...
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