Commit 6541b23e by Daniel Dahan

created extension for UIView with Grid

parent 1e61905c
{
"images" : [
{
"idiom" : "universal",
"filename" : "ic_more_vert_white.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "ic_more_vert_white_2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "ic_more_vert_white_3x.png",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
\ No newline at end of file
...@@ -55,11 +55,11 @@ class ViewController: UIViewController { ...@@ -55,11 +55,11 @@ class ViewController: UIViewController {
private func prepareSmallCardViewExample() { private func prepareSmallCardViewExample() {
var image: UIImage? = UIImage.imageWithColor(MaterialColor.blueGrey.darken4, size: CGSizeMake(100, 100)) var image: UIImage? = UIImage.imageWithColor(MaterialColor.blueGrey.darken4, size: CGSizeMake(100, 100))
let imageView: MaterialView = MaterialView() let imageView: MaterialView = MaterialView()
imageView.column = .Grid3 imageView.grid.column = .Grid3
imageView.image = image imageView.image = image
let contentView: MaterialView = MaterialView() let contentView: MaterialView = MaterialView()
contentView.column = .Grid9 contentView.grid.column = .Grid9
// contentView.backgroundColor = MaterialColor.blue.base // contentView.backgroundColor = MaterialColor.blue.base
// let titleGridView: GridView = GridView() // let titleGridView: GridView = GridView()
...@@ -120,9 +120,6 @@ class ViewController: UIViewController { ...@@ -120,9 +120,6 @@ class ViewController: UIViewController {
// btn3.setImage(image, forState: .Normal) // btn3.setImage(image, forState: .Normal)
// btn3.setImage(image, forState: .Highlighted) // btn3.setImage(image, forState: .Highlighted)
var grid1: Grid = Grid()
grid1.size = CGSizeMake(cardView.width, 120)
grid1.views = [imageView, contentView]
// var grid2: Grid = Grid() // var grid2: Grid = Grid()
// grid2.spacing = 8 // grid2.spacing = 8
...@@ -141,7 +138,7 @@ class ViewController: UIViewController { ...@@ -141,7 +138,7 @@ class ViewController: UIViewController {
// grid4.size = CGSizeMake(contentView.width - 8, buttonView.height) // grid4.size = CGSizeMake(contentView.width - 8, buttonView.height)
// grid4.views = [btn1, btn2, btn3] // grid4.views = [btn1, btn2, btn3]
print(imageView.column) print(imageView.grid.column)
view.addSubview(cardView) view.addSubview(cardView)
cardView.addSubview(imageView) cardView.addSubview(imageView)
cardView.addSubview(contentView) cardView.addSubview(contentView)
...@@ -159,7 +156,7 @@ class ViewController: UIViewController { ...@@ -159,7 +156,7 @@ class ViewController: UIViewController {
private func prepareHorizontalGridViewExample() { private func prepareHorizontalGridViewExample() {
var image: UIImage? = UIImage(named: "ic_flash_auto_white")?.imageWithRenderingMode(.AlwaysTemplate) var image: UIImage? = UIImage(named: "ic_flash_auto_white")?.imageWithRenderingMode(.AlwaysTemplate)
let btn1: FlatButton = FlatButton() let btn1: FlatButton = FlatButton()
btn1.column = .Grid3 btn1.grid.column = .Grid3
btn1.pulseColor = MaterialColor.blueGrey.darken4 btn1.pulseColor = MaterialColor.blueGrey.darken4
btn1.tintColor = MaterialColor.blueGrey.darken4 btn1.tintColor = MaterialColor.blueGrey.darken4
btn1.backgroundColor = MaterialColor.grey.lighten3 btn1.backgroundColor = MaterialColor.grey.lighten3
...@@ -169,7 +166,7 @@ class ViewController: UIViewController { ...@@ -169,7 +166,7 @@ class ViewController: UIViewController {
image = UIImage(named: "ic_flash_off_white")?.imageWithRenderingMode(.AlwaysTemplate) image = UIImage(named: "ic_flash_off_white")?.imageWithRenderingMode(.AlwaysTemplate)
let btn2: FlatButton = FlatButton() let btn2: FlatButton = FlatButton()
btn2.column = .Grid3 btn2.grid.column = .Grid3
btn2.pulseColor = MaterialColor.blueGrey.darken4 btn2.pulseColor = MaterialColor.blueGrey.darken4
btn2.tintColor = MaterialColor.blueGrey.darken4 btn2.tintColor = MaterialColor.blueGrey.darken4
btn2.backgroundColor = MaterialColor.grey.lighten3 btn2.backgroundColor = MaterialColor.grey.lighten3
...@@ -179,7 +176,7 @@ class ViewController: UIViewController { ...@@ -179,7 +176,7 @@ class ViewController: UIViewController {
image = UIImage(named: "ic_flash_on_white")?.imageWithRenderingMode(.AlwaysTemplate) image = UIImage(named: "ic_flash_on_white")?.imageWithRenderingMode(.AlwaysTemplate)
let btn3: FlatButton = FlatButton() let btn3: FlatButton = FlatButton()
btn3.column = .Grid3 btn3.grid.column = .Grid3
btn3.pulseColor = MaterialColor.blueGrey.darken4 btn3.pulseColor = MaterialColor.blueGrey.darken4
btn3.tintColor = MaterialColor.blueGrey.darken4 btn3.tintColor = MaterialColor.blueGrey.darken4
btn3.backgroundColor = MaterialColor.grey.lighten3 btn3.backgroundColor = MaterialColor.grey.lighten3
...@@ -195,10 +192,10 @@ class ViewController: UIViewController { ...@@ -195,10 +192,10 @@ class ViewController: UIViewController {
label2.text = "B" label2.text = "B"
label2.backgroundColor = MaterialColor.blue.base label2.backgroundColor = MaterialColor.blue.base
view.size = CGSizeMake(view.bounds.width, 40) view.grid.size = CGSizeMake(view.bounds.width, 40)
view.column = .Grid9 view.grid.column = .Grid9
view.spacing = 16 view.grid.spacing = 16
view.views = [btn1, btn2, btn3] view.grid.views = [btn1, btn2, btn3]
} }
// //
// internal func handleButton() { // internal func handleButton() {
......
...@@ -30,27 +30,6 @@ ...@@ -30,27 +30,6 @@
import UIKit import UIKit
import Foundation
func associatedObject<ValueType: AnyObject>(
base: AnyObject,
key: UnsafePointer<UInt8>,
initialiser: () -> ValueType)
-> ValueType {
if let associated = objc_getAssociatedObject(base, key)
as? ValueType { return associated }
let associated = initialiser()
objc_setAssociatedObject(base, key, associated,
.OBJC_ASSOCIATION_RETAIN)
return associated
}
func associateObject<ValueType: AnyObject>(
base: AnyObject,
key: UnsafePointer<UInt8>,
value: ValueType) {
objc_setAssociatedObject(base, key, value,
.OBJC_ASSOCIATION_RETAIN)
}
public enum GridSize : Int { public enum GridSize : Int {
case Grid1 = 1 case Grid1 = 1
case Grid2 = 2 case Grid2 = 2
...@@ -71,64 +50,6 @@ public enum GridLayout { ...@@ -71,64 +50,6 @@ public enum GridLayout {
case Vertical case Vertical
} }
private var gridKey: UInt8 = 0
public extension UIView {
public var grid: Grid {
get {
return associatedObject(self, key: &gridKey) { return Grid() }
}
set(value) {
associateObject(self, key: &gridKey, value: value)
}
}
public var column: GridSize {
get {
return grid.column
}
set(value) {
grid.column = value
}
}
public var row: GridSize {
get {
return grid.row
}
set(value) {
grid.row = value
}
}
public var size: CGSize {
get {
return grid.size
}
set(value) {
grid.size = value
}
}
public var spacing: CGFloat {
get {
return grid.spacing
}
set(value) {
grid.spacing = value
}
}
public var views: Array<UIView>? {
get {
return grid.views
}
set(value) {
grid.views = value
}
}
}
public protocol GridCell { public protocol GridCell {
/// Grid column size. /// Grid column size.
var column: GridSize { get set } var column: GridSize { get set }
...@@ -211,8 +132,8 @@ public class Grid { ...@@ -211,8 +132,8 @@ public class Grid {
var m: Int = 0 var m: Int = 0
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]
let c: Int = view.column.rawValue let c: Int = view.grid.column.rawValue
let r: Int = view.row.rawValue let r: Int = view.grid.row.rawValue
if .Horizontal == layout { if .Horizontal == layout {
if 0 == i { if 0 == i {
view.frame = CGRectMake(CGFloat(i + n) * w + contentInset.left, contentInset.top, (w * CGFloat(c)) - spacing, (0 < size.height ? size.height : view.intrinsicContentSize().height) - contentInset.top - contentInset.bottom) view.frame = CGRectMake(CGFloat(i + n) * w + contentInset.left, contentInset.top, (w * CGFloat(c)) - spacing, (0 < size.height ? size.height : view.intrinsicContentSize().height) - contentInset.top - contentInset.bottom)
...@@ -235,4 +156,31 @@ public class Grid { ...@@ -235,4 +156,31 @@ public class Grid {
} }
} }
} }
}
private func associatedObject<ValueType: AnyObject>(base: AnyObject, key: UnsafePointer<UInt8>, initialiser: () -> ValueType) -> ValueType {
if let associated = objc_getAssociatedObject(base, key) as? ValueType {
return associated
}
let associated = initialiser()
objc_setAssociatedObject(base, key, associated, .OBJC_ASSOCIATION_RETAIN)
return associated
}
private func associateObject<ValueType: AnyObject>(base: AnyObject, key: UnsafePointer<UInt8>, value: ValueType) {
objc_setAssociatedObject(base, key, value, .OBJC_ASSOCIATION_RETAIN)
}
private var gridKey: UInt8 = 0
public extension UIView {
public var grid: Grid {
get {
return associatedObject(self, key: &gridKey) { return Grid() }
}
set(value) {
associateObject(self, key: &gridKey, value: value)
}
}
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment