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 {
private func prepareSmallCardViewExample() {
var image: UIImage? = UIImage.imageWithColor(MaterialColor.blueGrey.darken4, size: CGSizeMake(100, 100))
let imageView: MaterialView = MaterialView()
imageView.column = .Grid3
imageView.grid.column = .Grid3
imageView.image = image
let contentView: MaterialView = MaterialView()
contentView.column = .Grid9
contentView.grid.column = .Grid9
// contentView.backgroundColor = MaterialColor.blue.base
// let titleGridView: GridView = GridView()
......@@ -120,9 +120,6 @@ class ViewController: UIViewController {
// btn3.setImage(image, forState: .Normal)
// btn3.setImage(image, forState: .Highlighted)
var grid1: Grid = Grid()
grid1.size = CGSizeMake(cardView.width, 120)
grid1.views = [imageView, contentView]
// var grid2: Grid = Grid()
// grid2.spacing = 8
......@@ -141,7 +138,7 @@ class ViewController: UIViewController {
// grid4.size = CGSizeMake(contentView.width - 8, buttonView.height)
// grid4.views = [btn1, btn2, btn3]
print(imageView.column)
print(imageView.grid.column)
view.addSubview(cardView)
cardView.addSubview(imageView)
cardView.addSubview(contentView)
......@@ -159,7 +156,7 @@ class ViewController: UIViewController {
private func prepareHorizontalGridViewExample() {
var image: UIImage? = UIImage(named: "ic_flash_auto_white")?.imageWithRenderingMode(.AlwaysTemplate)
let btn1: FlatButton = FlatButton()
btn1.column = .Grid3
btn1.grid.column = .Grid3
btn1.pulseColor = MaterialColor.blueGrey.darken4
btn1.tintColor = MaterialColor.blueGrey.darken4
btn1.backgroundColor = MaterialColor.grey.lighten3
......@@ -169,7 +166,7 @@ class ViewController: UIViewController {
image = UIImage(named: "ic_flash_off_white")?.imageWithRenderingMode(.AlwaysTemplate)
let btn2: FlatButton = FlatButton()
btn2.column = .Grid3
btn2.grid.column = .Grid3
btn2.pulseColor = MaterialColor.blueGrey.darken4
btn2.tintColor = MaterialColor.blueGrey.darken4
btn2.backgroundColor = MaterialColor.grey.lighten3
......@@ -179,7 +176,7 @@ class ViewController: UIViewController {
image = UIImage(named: "ic_flash_on_white")?.imageWithRenderingMode(.AlwaysTemplate)
let btn3: FlatButton = FlatButton()
btn3.column = .Grid3
btn3.grid.column = .Grid3
btn3.pulseColor = MaterialColor.blueGrey.darken4
btn3.tintColor = MaterialColor.blueGrey.darken4
btn3.backgroundColor = MaterialColor.grey.lighten3
......@@ -195,10 +192,10 @@ class ViewController: UIViewController {
label2.text = "B"
label2.backgroundColor = MaterialColor.blue.base
view.size = CGSizeMake(view.bounds.width, 40)
view.column = .Grid9
view.spacing = 16
view.views = [btn1, btn2, btn3]
view.grid.size = CGSizeMake(view.bounds.width, 40)
view.grid.column = .Grid9
view.grid.spacing = 16
view.grid.views = [btn1, btn2, btn3]
}
//
// internal func handleButton() {
......
......@@ -30,27 +30,6 @@
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 {
case Grid1 = 1
case Grid2 = 2
......@@ -71,64 +50,6 @@ public enum GridLayout {
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 {
/// Grid column size.
var column: GridSize { get set }
......@@ -211,8 +132,8 @@ public class Grid {
var m: Int = 0
for var i: Int = 0, l: Int = v.count - 1; i <= l; ++i {
let view: UIView = v[i]
let c: Int = view.column.rawValue
let r: Int = view.row.rawValue
let c: Int = view.grid.column.rawValue
let r: Int = view.grid.row.rawValue
if .Horizontal == layout {
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)
......@@ -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