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
50d1b21d
Commit
50d1b21d
authored
Feb 11, 2016
by
Daniel Dahan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
updated Grid interface
parent
c524d017
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
90 additions
and
67 deletions
+90
-67
Examples/Programmatic/GridView/GridView.xcodeproj/project.pbxproj
+6
-0
Examples/Programmatic/GridView/GridView/ViewController.swift
+0
-0
Sources/Grid.swift
+84
-67
No files found.
Examples/Programmatic/GridView/GridView.xcodeproj/project.pbxproj
View file @
50d1b21d
...
@@ -7,6 +7,8 @@
...
@@ -7,6 +7,8 @@
objects
=
{
objects
=
{
/* Begin PBXBuildFile section */
/* Begin PBXBuildFile section */
9656CD121C6C664700EBCEF1
/* Material.framework in Frameworks */
=
{
isa
=
PBXBuildFile
;
fileRef
=
9656CD111C6C664700EBCEF1
/* Material.framework */
;
};
9656CD131C6C664700EBCEF1
/* Material.framework in Embed Frameworks */
=
{
isa
=
PBXBuildFile
;
fileRef
=
9656CD111C6C664700EBCEF1
/* Material.framework */
;
settings
=
{
ATTRIBUTES
=
(
CodeSignOnCopy
,
RemoveHeadersOnCopy
,
);
};
};
965C58CD1C6B936400CFB4E1
/* AppDelegate.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
965C58CC1C6B936400CFB4E1
/* AppDelegate.swift */
;
};
965C58CD1C6B936400CFB4E1
/* AppDelegate.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
965C58CC1C6B936400CFB4E1
/* AppDelegate.swift */
;
};
965C58CF1C6B936400CFB4E1
/* ViewController.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
965C58CE1C6B936400CFB4E1
/* ViewController.swift */
;
};
965C58CF1C6B936400CFB4E1
/* ViewController.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
965C58CE1C6B936400CFB4E1
/* ViewController.swift */
;
};
965C58D41C6B936400CFB4E1
/* Assets.xcassets in Resources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
965C58D31C6B936400CFB4E1
/* Assets.xcassets */
;
};
965C58D41C6B936400CFB4E1
/* Assets.xcassets in Resources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
965C58D31C6B936400CFB4E1
/* Assets.xcassets */
;
};
...
@@ -20,6 +22,7 @@
...
@@ -20,6 +22,7 @@
dstPath
=
""
;
dstPath
=
""
;
dstSubfolderSpec
=
10
;
dstSubfolderSpec
=
10
;
files
=
(
files
=
(
9656CD131C6C664700EBCEF1
/* Material.framework in Embed Frameworks */
,
);
);
name
=
"Embed Frameworks"
;
name
=
"Embed Frameworks"
;
runOnlyForDeploymentPostprocessing
=
0
;
runOnlyForDeploymentPostprocessing
=
0
;
...
@@ -27,6 +30,7 @@
...
@@ -27,6 +30,7 @@
/* End PBXCopyFilesBuildPhase section */
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
/* Begin PBXFileReference section */
9656CD111C6C664700EBCEF1
/* Material.framework */
=
{
isa
=
PBXFileReference
;
explicitFileType
=
wrapper.framework
;
name
=
Material.framework
;
path
=
"/Users/danieldahan/Library/Developer/Xcode/DerivedData/Material-hbpnflxhoouqxebjcyhbbhqyesjd/Build/Products/Debug-iphoneos/Material.framework"
;
sourceTree
=
"<absolute>"
;
};
965C58C91C6B936400CFB4E1
/* GridView.app */
=
{
isa
=
PBXFileReference
;
explicitFileType
=
wrapper.application
;
includeInIndex
=
0
;
path
=
GridView.app
;
sourceTree
=
BUILT_PRODUCTS_DIR
;
};
965C58C91C6B936400CFB4E1
/* GridView.app */
=
{
isa
=
PBXFileReference
;
explicitFileType
=
wrapper.application
;
includeInIndex
=
0
;
path
=
GridView.app
;
sourceTree
=
BUILT_PRODUCTS_DIR
;
};
965C58CC1C6B936400CFB4E1
/* AppDelegate.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
AppDelegate.swift
;
sourceTree
=
"<group>"
;
};
965C58CC1C6B936400CFB4E1
/* AppDelegate.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
AppDelegate.swift
;
sourceTree
=
"<group>"
;
};
965C58CE1C6B936400CFB4E1
/* ViewController.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
ViewController.swift
;
sourceTree
=
"<group>"
;
};
965C58CE1C6B936400CFB4E1
/* ViewController.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
ViewController.swift
;
sourceTree
=
"<group>"
;
};
...
@@ -40,6 +44,7 @@
...
@@ -40,6 +44,7 @@
isa
=
PBXFrameworksBuildPhase
;
isa
=
PBXFrameworksBuildPhase
;
buildActionMask
=
2147483647
;
buildActionMask
=
2147483647
;
files
=
(
files
=
(
9656CD121C6C664700EBCEF1
/* Material.framework in Frameworks */
,
);
);
runOnlyForDeploymentPostprocessing
=
0
;
runOnlyForDeploymentPostprocessing
=
0
;
};
};
...
@@ -49,6 +54,7 @@
...
@@ -49,6 +54,7 @@
965C58C01C6B936400CFB4E1
=
{
965C58C01C6B936400CFB4E1
=
{
isa
=
PBXGroup
;
isa
=
PBXGroup
;
children
=
(
children
=
(
9656CD111C6C664700EBCEF1
/* Material.framework */
,
965C58CB1C6B936400CFB4E1
/* GridView */
,
965C58CB1C6B936400CFB4E1
/* GridView */
,
965C58CA1C6B936400CFB4E1
/* Products */
,
965C58CA1C6B936400CFB4E1
/* Products */
,
);
);
...
...
Examples/Programmatic/GridView/GridView/ViewController.swift
View file @
50d1b21d
This diff is collapsed.
Click to expand it.
Sources/Grid.swift
View file @
50d1b21d
...
@@ -30,70 +30,88 @@
...
@@ -30,70 +30,88 @@
import
UIKit
import
UIKit
public
enum
GridRow
:
Int
{
public
enum
GridAxisDirection
{
case
Row1
=
1
case
Row2
=
2
case
Row3
=
3
case
Row4
=
4
case
Row5
=
5
case
Row6
=
6
case
Row7
=
7
case
Row8
=
8
case
Row9
=
9
case
Row10
=
10
case
Row11
=
11
case
Row12
=
12
}
public
enum
GridColumn
:
Int
{
case
Column1
=
1
case
Column2
=
2
case
Column3
=
3
case
Column4
=
4
case
Column5
=
5
case
Column6
=
6
case
Column7
=
7
case
Column8
=
8
case
Column9
=
9
case
Column10
=
10
case
Column11
=
11
case
Column12
=
12
}
public
enum
GridAxis
{
case
Horizontal
case
Horizontal
case
Vertical
case
Vertical
}
}
public
class
Grid
{
public
class
GridAxis
{
/// The row size.
/// Grid reference.
public
var
row
:
GridRow
{
unowned
var
grid
:
Grid
/// Inherit grid rows and columns.
public
var
inherited
:
Bool
=
true
/// The direction the grid layouts its views out.
public
var
direction
:
GridAxisDirection
=
.
Horizontal
/// The rows size.
public
var
rows
:
Int
{
didSet
{
didSet
{
reloadLayout
()
grid
.
reloadLayout
()
}
}
}
}
/// The
row
size.
/// The
columns
size.
public
var
rowOffset
:
GridRow
?
{
public
var
columns
:
Int
{
didSet
{
didSet
{
reloadLayout
()
grid
.
reloadLayout
()
}
}
public
init
(
grid
:
Grid
,
rows
:
Int
=
12
,
columns
:
Int
=
12
)
{
self
.
grid
=
grid
self
.
rows
=
rows
self
.
columns
=
columns
}
}
public
class
GridOffset
{
/// Grid reference.
unowned
var
grid
:
Grid
/// The rows size.
public
var
rows
:
Int
{
didSet
{
grid
.
reloadLayout
()
}
}
}
}
/// The column size.
/// The columns size.
public
var
column
:
GridColumn
{
public
var
columns
:
Int
{
didSet
{
grid
.
reloadLayout
()
}
}
public
init
(
grid
:
Grid
,
rows
:
Int
=
0
,
columns
:
Int
=
0
)
{
self
.
grid
=
grid
self
.
rows
=
rows
self
.
columns
=
columns
}
}
public
class
Grid
{
/// The rows size.
public
var
rows
:
Int
{
didSet
{
didSet
{
reloadLayout
()
reloadLayout
()
}
}
}
}
/// The column size.
/// The column
s
size.
public
var
column
Offset
:
GridColumn
?
{
public
var
column
s
:
Int
{
didSet
{
didSet
{
reloadLayout
()
reloadLayout
()
}
}
}
}
/// Offsets for rows and columns.
public
private(set)
var
offset
:
GridOffset
!
/// The axis in which the Grid is laying out its views.
public
private(set)
var
axis
:
GridAxis
!
/// Preset inset value for grid.
/// Preset inset value for grid.
public
var
contentInsetPreset
:
MaterialEdgeInsetPreset
=
.
None
{
public
var
contentInsetPreset
:
MaterialEdgeInsetPreset
=
.
None
{
didSet
{
didSet
{
...
@@ -108,20 +126,13 @@ public class Grid {
...
@@ -108,20 +126,13 @@ public class Grid {
}
}
}
}
/// The space between grid columns.
/// The space between grid columns
s
.
public
var
spacing
:
CGFloat
{
public
var
spacing
:
CGFloat
{
didSet
{
didSet
{
reloadLayout
()
reloadLayout
()
}
}
}
}
/// The axis in which the Grid is laying out its views.
public
var
axis
:
GridAxis
=
.
Horizontal
{
didSet
{
reloadLayout
()
}
}
/// An Array of UIButtons.
/// An Array of UIButtons.
public
var
views
:
Array
<
UIView
>
?
{
public
var
views
:
Array
<
UIView
>
?
{
didSet
{
didSet
{
...
@@ -129,10 +140,12 @@ public class Grid {
...
@@ -129,10 +140,12 @@ public class Grid {
}
}
}
}
public
init
(
row
:
GridRow
=
.
Row12
,
column
:
GridColumn
=
.
Column
12
,
spacing
:
CGFloat
=
0
)
{
public
init
(
row
s
:
Int
=
12
,
columns
:
Int
=
12
,
spacing
:
CGFloat
=
0
)
{
self
.
row
=
row
self
.
row
s
=
rows
self
.
column
=
column
self
.
column
s
=
columns
self
.
spacing
=
spacing
self
.
spacing
=
spacing
self
.
offset
=
GridOffset
(
grid
:
self
)
self
.
axis
=
GridAxis
(
grid
:
self
)
}
}
/// Reload the button layout.
/// Reload the button layout.
...
@@ -143,13 +156,13 @@ public class Grid {
...
@@ -143,13 +156,13 @@ public class Grid {
for
var
i
:
Int
=
0
,
l
:
Int
=
v
.
count
-
1
;
i
<=
l
;
++
i
{
for
var
i
:
Int
=
0
,
l
:
Int
=
v
.
count
-
1
;
i
<=
l
;
++
i
{
let
view
:
UIView
=
v
[
i
]
let
view
:
UIView
=
v
[
i
]
if
let
sv
:
UIView
=
view
.
superview
{
if
let
sv
:
UIView
=
view
.
superview
{
let
w
:
CGFloat
=
(
sv
.
bounds
.
width
-
contentInset
.
left
-
contentInset
.
right
+
spacing
)
/
CGFloat
(
column
.
rawValue
)
let
w
:
CGFloat
=
(
sv
.
bounds
.
width
-
contentInset
.
left
-
contentInset
.
right
+
spacing
)
/
CGFloat
(
axis
.
inherited
?
columns
:
axis
.
columns
)
let
h
:
CGFloat
=
(
sv
.
bounds
.
height
-
contentInset
.
top
-
contentInset
.
bottom
+
spacing
)
/
CGFloat
(
row
.
rawValue
)
let
h
:
CGFloat
=
(
sv
.
bounds
.
height
-
contentInset
.
top
-
contentInset
.
bottom
+
spacing
)
/
CGFloat
(
axis
.
inherited
?
rows
:
axis
.
rows
)
let
c
:
Int
=
view
.
grid
.
column
.
rawValue
let
c
:
Int
=
view
.
grid
.
column
s
let
r
:
Int
=
view
.
grid
.
row
.
rawValue
let
r
:
Int
=
view
.
grid
.
row
s
let
co
:
Int
=
nil
==
view
.
grid
.
columnOffset
?
0
:
view
.
grid
.
columnOffset
!.
rawValue
let
co
:
Int
=
view
.
grid
.
offset
.
columns
let
ro
:
Int
=
nil
==
view
.
grid
.
rowOffset
?
0
:
view
.
grid
.
rowOffset
!.
rawValue
let
ro
:
Int
=
view
.
grid
.
offset
.
rows
if
.
Horizontal
==
axis
{
if
.
Horizontal
==
axis
.
direction
{
// View height.
// View height.
let
vh
:
CGFloat
=
sv
.
bounds
.
height
-
contentInset
.
top
-
contentInset
.
bottom
let
vh
:
CGFloat
=
sv
.
bounds
.
height
-
contentInset
.
top
-
contentInset
.
bottom
...
@@ -167,7 +180,9 @@ public class Grid {
...
@@ -167,7 +180,9 @@ public class Grid {
}
else
{
}
else
{
view
.
frame
=
CGRectMake
(
vl
,
contentInset
.
top
,
vw
,
vh
)
view
.
frame
=
CGRectMake
(
vl
,
contentInset
.
top
,
vw
,
vh
)
}
}
}
else
if
.
Vertical
==
axis
{
n
+=
c
+
co
-
1
}
else
if
.
Vertical
==
axis
.
direction
{
// View width.
// View width.
let
vw
:
CGFloat
=
sv
.
bounds
.
width
-
contentInset
.
left
-
contentInset
.
right
let
vw
:
CGFloat
=
sv
.
bounds
.
width
-
contentInset
.
left
-
contentInset
.
right
...
@@ -184,17 +199,17 @@ public class Grid {
...
@@ -184,17 +199,17 @@ public class Grid {
}
else
{
}
else
{
view
.
frame
=
CGRectMake
(
contentInset
.
left
,
vt
,
vw
,
vh
)
view
.
frame
=
CGRectMake
(
contentInset
.
left
,
vt
,
vw
,
vh
)
}
}
m
+=
r
+
ro
-
1
}
}
n
+=
c
+
co
-
1
m
+=
r
+
ro
-
1
}
}
}
}
}
}
}
}
}
}
private
func
associatedObject
<
ValueType
:
AnyObject
>
(
base
:
AnyObject
,
key
:
UnsafePointer
<
UInt8
>
,
initialiser
:
()
->
ValueType
)
->
ValueType
{
private
func
associatedObject
<
T
:
AnyObject
>
(
base
:
AnyObject
,
key
:
UnsafePointer
<
UInt8
>
,
initialiser
:
()
->
T
)
->
T
{
if
let
associated
=
objc_getAssociatedObject
(
base
,
key
)
as?
ValueType
{
if
let
associated
:
T
=
objc_getAssociatedObject
(
base
,
key
)
as?
T
{
return
associated
return
associated
}
}
...
@@ -203,7 +218,7 @@ private func associatedObject<ValueType: AnyObject>(base: AnyObject, key: Unsafe
...
@@ -203,7 +218,7 @@ private func associatedObject<ValueType: AnyObject>(base: AnyObject, key: Unsafe
return
associated
return
associated
}
}
private
func
associateObject
<
ValueType
:
AnyObject
>
(
base
:
AnyObject
,
key
:
UnsafePointer
<
UInt8
>
,
value
:
ValueType
)
{
private
func
associateObject
<
T
:
AnyObject
>
(
base
:
AnyObject
,
key
:
UnsafePointer
<
UInt8
>
,
value
:
T
)
{
objc_setAssociatedObject
(
base
,
key
,
value
,
.
OBJC_ASSOCIATION_RETAIN
)
objc_setAssociatedObject
(
base
,
key
,
value
,
.
OBJC_ASSOCIATION_RETAIN
)
}
}
...
@@ -212,7 +227,9 @@ private var gridKey: UInt8 = 0
...
@@ -212,7 +227,9 @@ private var gridKey: UInt8 = 0
public
extension
UIView
{
public
extension
UIView
{
public
var
grid
:
Grid
{
public
var
grid
:
Grid
{
get
{
get
{
return
associatedObject
(
self
,
key
:
&
gridKey
)
{
return
Grid
()
}
return
associatedObject
(
self
,
key
:
&
gridKey
)
{
return
Grid
()
}
}
}
set
(
value
)
{
set
(
value
)
{
associateObject
(
self
,
key
:
&
gridKey
,
value
:
value
)
associateObject
(
self
,
key
:
&
gridKey
,
value
:
value
)
...
...
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