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