Commit cf6e12ec by Daniel Dahan

added MaterialCollectionViewCell

parent f8d7781b
...@@ -79,7 +79,6 @@ class AppNavigationBarViewController: NavigationBarViewController { ...@@ -79,7 +79,6 @@ class AppNavigationBarViewController: NavigationBarViewController {
titleLabel.text = "Feed" titleLabel.text = "Feed"
titleLabel.textAlignment = .Left titleLabel.textAlignment = .Left
titleLabel.textColor = MaterialColor.white titleLabel.textColor = MaterialColor.white
titleLabel.font = RobotoFont.regular
var image = UIImage(named: "ic_menu_white") var image = UIImage(named: "ic_menu_white")
......
...@@ -62,7 +62,7 @@ ...@@ -62,7 +62,7 @@
96CC08581C7E11430034FF84 /* MaterialCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96CC08571C7E11430034FF84 /* MaterialCollectionView.swift */; }; 96CC08581C7E11430034FF84 /* MaterialCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96CC08571C7E11430034FF84 /* MaterialCollectionView.swift */; };
96CC085A1C7E16BD0034FF84 /* MaterialCollectionViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96CC08591C7E16BD0034FF84 /* MaterialCollectionViewDataSource.swift */; }; 96CC085A1C7E16BD0034FF84 /* MaterialCollectionViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96CC08591C7E16BD0034FF84 /* MaterialCollectionViewDataSource.swift */; };
96CC085C1C7E16F20034FF84 /* MaterialCollectionViewDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96CC085B1C7E16F20034FF84 /* MaterialCollectionViewDelegate.swift */; }; 96CC085C1C7E16F20034FF84 /* MaterialCollectionViewDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96CC085B1C7E16F20034FF84 /* MaterialCollectionViewDelegate.swift */; };
96CC085E1C7E1D550034FF84 /* MaterialCollectionViewDataSourceItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96CC085D1C7E1D550034FF84 /* MaterialCollectionViewDataSourceItem.swift */; }; 96CC085E1C7E1D550034FF84 /* MaterialDataSourceItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96CC085D1C7E1D550034FF84 /* MaterialDataSourceItem.swift */; };
96D88C1E1C1328D800B91418 /* CaptureView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96D88BF51C1328D800B91418 /* CaptureView.swift */; }; 96D88C1E1C1328D800B91418 /* CaptureView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96D88BF51C1328D800B91418 /* CaptureView.swift */; };
96D88C1F1C1328D800B91418 /* CardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96D88BF61C1328D800B91418 /* CardView.swift */; }; 96D88C1F1C1328D800B91418 /* CardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96D88BF61C1328D800B91418 /* CardView.swift */; };
96D88C201C1328D800B91418 /* CapturePreviewView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96D88BF71C1328D800B91418 /* CapturePreviewView.swift */; }; 96D88C201C1328D800B91418 /* CapturePreviewView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96D88BF71C1328D800B91418 /* CapturePreviewView.swift */; };
...@@ -175,7 +175,7 @@ ...@@ -175,7 +175,7 @@
96CC08571C7E11430034FF84 /* MaterialCollectionView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MaterialCollectionView.swift; sourceTree = "<group>"; }; 96CC08571C7E11430034FF84 /* MaterialCollectionView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MaterialCollectionView.swift; sourceTree = "<group>"; };
96CC08591C7E16BD0034FF84 /* MaterialCollectionViewDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MaterialCollectionViewDataSource.swift; sourceTree = "<group>"; }; 96CC08591C7E16BD0034FF84 /* MaterialCollectionViewDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MaterialCollectionViewDataSource.swift; sourceTree = "<group>"; };
96CC085B1C7E16F20034FF84 /* MaterialCollectionViewDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MaterialCollectionViewDelegate.swift; sourceTree = "<group>"; }; 96CC085B1C7E16F20034FF84 /* MaterialCollectionViewDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MaterialCollectionViewDelegate.swift; sourceTree = "<group>"; };
96CC085D1C7E1D550034FF84 /* MaterialCollectionViewDataSourceItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MaterialCollectionViewDataSourceItem.swift; sourceTree = "<group>"; }; 96CC085D1C7E1D550034FF84 /* MaterialDataSourceItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MaterialDataSourceItem.swift; sourceTree = "<group>"; };
96D88BF51C1328D800B91418 /* CaptureView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CaptureView.swift; sourceTree = "<group>"; }; 96D88BF51C1328D800B91418 /* CaptureView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CaptureView.swift; sourceTree = "<group>"; };
96D88BF61C1328D800B91418 /* CardView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CardView.swift; sourceTree = "<group>"; }; 96D88BF61C1328D800B91418 /* CardView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CardView.swift; sourceTree = "<group>"; };
96D88BF71C1328D800B91418 /* CapturePreviewView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CapturePreviewView.swift; sourceTree = "<group>"; }; 96D88BF71C1328D800B91418 /* CapturePreviewView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CapturePreviewView.swift; sourceTree = "<group>"; };
...@@ -341,7 +341,7 @@ ...@@ -341,7 +341,7 @@
96CC08571C7E11430034FF84 /* MaterialCollectionView.swift */, 96CC08571C7E11430034FF84 /* MaterialCollectionView.swift */,
96CC08591C7E16BD0034FF84 /* MaterialCollectionViewDataSource.swift */, 96CC08591C7E16BD0034FF84 /* MaterialCollectionViewDataSource.swift */,
96CC085B1C7E16F20034FF84 /* MaterialCollectionViewDelegate.swift */, 96CC085B1C7E16F20034FF84 /* MaterialCollectionViewDelegate.swift */,
96CC085D1C7E1D550034FF84 /* MaterialCollectionViewDataSourceItem.swift */, 96CC085D1C7E1D550034FF84 /* MaterialDataSourceItem.swift */,
); );
name = CollectionView; name = CollectionView;
sourceTree = "<group>"; sourceTree = "<group>";
...@@ -739,7 +739,7 @@ ...@@ -739,7 +739,7 @@
96D88C331C1328D800B91418 /* MaterialLabel.swift in Sources */, 96D88C331C1328D800B91418 /* MaterialLabel.swift in Sources */,
96D88C281C1328D800B91418 /* MaterialAnimation.swift in Sources */, 96D88C281C1328D800B91418 /* MaterialAnimation.swift in Sources */,
96A71F301C72E41100C0C4AE /* NavigationBarViewController.swift in Sources */, 96A71F301C72E41100C0C4AE /* NavigationBarViewController.swift in Sources */,
96CC085E1C7E1D550034FF84 /* MaterialCollectionViewDataSourceItem.swift in Sources */, 96CC085E1C7E1D550034FF84 /* MaterialDataSourceItem.swift in Sources */,
960B232E1C383EAA00E96216 /* Material+UIImage.swift in Sources */, 960B232E1C383EAA00E96216 /* Material+UIImage.swift in Sources */,
96D88C451C1328D800B91418 /* RobotoFont.swift in Sources */, 96D88C451C1328D800B91418 /* RobotoFont.swift in Sources */,
96D88C1F1C1328D800B91418 /* CardView.swift in Sources */, 96D88C1F1C1328D800B91418 /* CardView.swift in Sources */,
......
...@@ -31,13 +31,13 @@ ...@@ -31,13 +31,13 @@
import UIKit import UIKit
public class ControlView : MaterialView { public class ControlView : MaterialView {
/// ContentView that holds the any desired subviews.
public private(set) lazy var contentView: MaterialView = MaterialView()
/// A preset wrapper around contentInset. /// A preset wrapper around contentInset.
public var contentInsetPreset: MaterialEdgeInset = .None { public var contentInsetPreset: MaterialEdgeInset {
didSet { get {
contentInset = MaterialEdgeInsetToValue(contentInsetPreset) return grid.contentInsetPreset
}
set(value) {
grid.contentInsetPreset = value
} }
} }
...@@ -47,8 +47,7 @@ public class ControlView : MaterialView { ...@@ -47,8 +47,7 @@ public class ControlView : MaterialView {
return grid.contentInset return grid.contentInset
} }
set(value) { set(value) {
grid.contentInset = contentInset grid.contentInset = value
reloadView()
} }
} }
...@@ -58,11 +57,13 @@ public class ControlView : MaterialView { ...@@ -58,11 +57,13 @@ public class ControlView : MaterialView {
return grid.spacing return grid.spacing
} }
set(value) { set(value) {
grid.spacing = spacing grid.spacing = value
reloadView()
} }
} }
/// ContentView that holds the any desired subviews.
public private(set) lazy var contentView: MaterialView = MaterialView()
/// Left side UIControls. /// Left side UIControls.
public var leftControls: Array<UIControl>? { public var leftControls: Array<UIControl>? {
didSet { didSet {
......
...@@ -66,7 +66,6 @@ public class MaterialCollectionView : UICollectionView { ...@@ -66,7 +66,6 @@ public class MaterialCollectionView : UICollectionView {
when subclassing. when subclassing.
*/ */
public func prepareView() { public func prepareView() {
registerClass(MaterialCollectionViewCell.self, forCellWithReuseIdentifier: "Cell")
backgroundColor = MaterialColor.clear backgroundColor = MaterialColor.clear
contentInset = UIEdgeInsetsZero contentInset = UIEdgeInsetsZero
} }
......
...@@ -32,6 +32,36 @@ import UIKit ...@@ -32,6 +32,36 @@ import UIKit
@objc(MaterialCollectionViewCell) @objc(MaterialCollectionViewCell)
public class MaterialCollectionViewCell : UICollectionViewCell { public class MaterialCollectionViewCell : UICollectionViewCell {
/// A preset wrapper around contentInset.
public var contentInsetPreset: MaterialEdgeInset {
get {
return contentView.grid.contentInsetPreset
}
set(value) {
contentView.grid.contentInsetPreset = value
}
}
/// A wrapper around grid.contentInset.
public var contentInset: UIEdgeInsets {
get {
return contentView.grid.contentInset
}
set(value) {
contentView.grid.contentInset = value
}
}
/// A wrapper around grid.spacing.
public var spacing: CGFloat {
get {
return contentView.grid.spacing
}
set(value) {
contentView.grid.spacing = value
}
}
/** /**
A CAShapeLayer used to manage elements that would be affected by A CAShapeLayer used to manage elements that would be affected by
the clipToBounds property of the backing layer. For example, this the clipToBounds property of the backing layer. For example, this
......
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
public protocol MaterialCollectionViewDataSource : MaterialDelegate, UICollectionViewDataSource { public protocol MaterialCollectionViewDataSource : MaterialDelegate, UICollectionViewDataSource {
/** /**
/// Retrieves the items for the collectionView. /// Retrieves the items for the collectionView.
- Returns: An Array of Arrays of MaterialCollectionViewDataSourceItem objects. - Returns: An Array of Arrays of MaterialDataSourceItem objects.
*/ */
func items() -> Array<Array<MaterialCollectionViewDataSourceItem>> func items() -> Array<Array<MaterialDataSourceItem>>
} }
\ No newline at end of file
...@@ -30,12 +30,17 @@ ...@@ -30,12 +30,17 @@
import UIKit import UIKit
public enum MaterialCollectionViewLayoutScrollDirection {
case Vertical
case Horizontal
}
public class MaterialCollectionViewLayout : UICollectionViewLayout { public class MaterialCollectionViewLayout : UICollectionViewLayout {
/// A preset wrapper around contentInset.
public var contentInsetPreset: MaterialEdgeInset = .None {
didSet {
contentInset = MaterialEdgeInsetToValue(contentInsetPreset)
}
}
/// A wrapper around grid.contentInset.
public var contentInset: UIEdgeInsets = UIEdgeInsetsZero
/// Size of the content. /// Size of the content.
private var contentSize: CGSize = CGSizeZero private var contentSize: CGSize = CGSizeZero
...@@ -43,17 +48,20 @@ public class MaterialCollectionViewLayout : UICollectionViewLayout { ...@@ -43,17 +48,20 @@ public class MaterialCollectionViewLayout : UICollectionViewLayout {
private var layoutItems: Array<(UICollectionViewLayoutAttributes, NSIndexPath)> = Array<(UICollectionViewLayoutAttributes, NSIndexPath)>() private var layoutItems: Array<(UICollectionViewLayoutAttributes, NSIndexPath)> = Array<(UICollectionViewLayoutAttributes, NSIndexPath)>()
/// Used to calculate the dimensions of the cells. /// Used to calculate the dimensions of the cells.
private var offset: CGFloat = 0 private var offset: CGPoint = CGPointZero
/// Cell items. /// Cell items.
private var items: Array<Array<MaterialCollectionViewDataSourceItem>>? private var items: Array<Array<MaterialDataSourceItem>>?
/// Scroll direction. /// Scroll direction.
public var scrollDirection: MaterialCollectionViewLayoutScrollDirection = .Vertical public var scrollDirection: UICollectionViewScrollDirection = .Vertical
/// Scale of the screen. /// Scale of the screen.
public var scale: CGFloat = 2 public var scale: CGFloat = 2
/// Spacing between items.
public var spacing: CGFloat = 0
/** /**
Retrieves the index paths for the items within the passed in CGRect. Retrieves the index paths for the items within the passed in CGRect.
- Parameter rect: A CGRect that acts as the bounds to find the items within. - Parameter rect: A CGRect that acts as the bounds to find the items within.
...@@ -71,14 +79,13 @@ public class MaterialCollectionViewLayout : UICollectionViewLayout { ...@@ -71,14 +79,13 @@ public class MaterialCollectionViewLayout : UICollectionViewLayout {
public override func layoutAttributesForItemAtIndexPath(indexPath: NSIndexPath) -> UICollectionViewLayoutAttributes? { public override func layoutAttributesForItemAtIndexPath(indexPath: NSIndexPath) -> UICollectionViewLayoutAttributes? {
let attributes: UICollectionViewLayoutAttributes = UICollectionViewLayoutAttributes(forCellWithIndexPath: indexPath) let attributes: UICollectionViewLayoutAttributes = UICollectionViewLayoutAttributes(forCellWithIndexPath: indexPath)
let item: MaterialCollectionViewDataSourceItem = items![indexPath.section][indexPath.item] let item: MaterialDataSourceItem = items![indexPath.section][indexPath.item]
if .Vertical == scrollDirection { switch scrollDirection {
attributes.frame = CGRectMake(0, offset / scale, collectionView!.bounds.width, item.size.height) case .Vertical:
offset += item.size.height attributes.frame = CGRectMake(contentInset.left, offset.y, collectionView!.bounds.width - contentInset.left - contentInset.right, nil == item.size?.height ? collectionView!.bounds.height : item.size!.height)
} else { case .Horizontal:
attributes.frame = CGRectMake(offset / scale, 0, item.size.width, collectionView!.bounds.height) attributes.frame = CGRectMake(offset.x, contentInset.top, nil == item.size?.width ? collectionView!.bounds.width : item.size!.width, collectionView!.bounds.height - contentInset.top - contentInset.bottom)
offset += item.size.width
} }
return attributes return attributes
...@@ -107,22 +114,31 @@ public class MaterialCollectionViewLayout : UICollectionViewLayout { ...@@ -107,22 +114,31 @@ public class MaterialCollectionViewLayout : UICollectionViewLayout {
items = dataSource.items() items = dataSource.items()
layoutItems.removeAll() layoutItems.removeAll()
offset = 0
offset.x = contentInset.left
offset.y = contentInset.top
var indexPath: NSIndexPath? var indexPath: NSIndexPath?
for var i: Int = 0, l: Int = items!.count; i < l; ++i { for var i: Int = 0, l: Int = items!.count - 1; i <= l; ++i {
let v: Array<MaterialCollectionViewDataSourceItem> = items![i] let v: Array<MaterialDataSourceItem> = items![i]
for var j: Int = 0, k: Int = v.count; j < k; ++j { for var j: Int = 0, k: Int = v.count - 1; j <= k; ++j {
let item: MaterialCollectionViewDataSourceItem = v[j] let item: MaterialDataSourceItem = v[j]
indexPath = NSIndexPath(forItem: j, inSection: i) indexPath = NSIndexPath(forItem: j, inSection: i)
layoutItems.append((layoutAttributesForItemAtIndexPath(indexPath!)!, indexPath!)) layoutItems.append((layoutAttributesForItemAtIndexPath(indexPath!)!, indexPath!))
offset += .Vertical == scrollDirection ? item.size.height : item.size.width
offset.x += spacing
offset.x += nil == item.size?.width ? 0 : item.size!.width
offset.y += spacing
offset.y += nil == item.size?.height ? 0 : item.size!.height
} }
} }
contentSize = .Vertical == scrollDirection ? CGSizeMake(collectionView!.bounds.width, offset / scale) : CGSizeMake(offset / scale, collectionView!.bounds.height) offset.x += contentInset.right - spacing
offset = 0 offset.y += contentInset.bottom - spacing
contentSize = .Vertical == scrollDirection ? CGSizeMake(collectionView!.bounds.width, offset.y) : CGSizeMake(offset.x, collectionView!.bounds.height)
} }
public override func targetContentOffsetForProposedContentOffset(proposedContentOffset: CGPoint) -> CGPoint { public override func targetContentOffsetForProposedContentOffset(proposedContentOffset: CGPoint) -> CGPoint {
......
...@@ -28,12 +28,14 @@ ...@@ -28,12 +28,14 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
public struct MaterialCollectionViewDataSourceItem { public struct MaterialDataSourceItem {
var data: AnyObject public var data: AnyObject?
var size: CGSize public var size: CGSize?
public var origin: CGPoint?
public init(data: AnyObject, size: CGSize) { public init(data: AnyObject? = nil, size: CGSize? = nil, origin: CGPoint? = nil) {
self.data = data self.data = data
self.size = size self.size = size
self.origin = origin
} }
} }
\ 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