Commit 7d3ade62 by Daniel Dahan

development: handling dynamic sizing for collectionViewCard

parent adc1b827
...@@ -34,8 +34,10 @@ import UIKit ...@@ -34,8 +34,10 @@ import UIKit
public enum MenuDirection: Int { public enum MenuDirection: Int {
case up case up
case down case down
case left case topLeft
case right case topRight
case bottomLeft
case bottomRight
} }
open class MenuItem: Toolbar { open class MenuItem: Toolbar {
...@@ -44,10 +46,12 @@ open class MenuItem: Toolbar { ...@@ -44,10 +46,12 @@ open class MenuItem: Toolbar {
heightPreset = .normal heightPreset = .normal
titleLabel.textAlignment = .left titleLabel.textAlignment = .left
detailLabel.textAlignment = .left detailLabel.textAlignment = .left
contentViewAlignment = .center
} }
} }
class MenuCollectionViewCell: CollectionViewCell { class MenuCollectionViewCell: CollectionViewCell {
/// A reference to the MenuItem.
open var menuItem: MenuItem? { open var menuItem: MenuItem? {
didSet { didSet {
oldValue?.removeFromSuperview() oldValue?.removeFromSuperview()
...@@ -113,19 +117,35 @@ open class Menu: Button { ...@@ -113,19 +117,35 @@ open class Menu: Button {
} }
} }
/// A reference to the collectionView. /// A reference to the collectionViewCard.
open let card = CollectionViewCard() @IBInspectable
open let collectionViewCard = CollectionViewCard()
/// A preset wrapper around collectionViewCardEdgeInsets.
open var collectionViewCardEdgeInsetsPreset = EdgeInsetsPreset.none {
didSet {
collectionViewCardEdgeInsets = EdgeInsetsPresetToValue(preset: collectionViewCardEdgeInsetsPreset)
}
}
/// A reference to collectionViewCardEdgeInsets.
@IBInspectable
open var collectionViewCardEdgeInsets = EdgeInsets.zero {
didSet {
layoutSubviews()
}
}
/** /**
Retrieves the data source items for the collectionView. Retrieves the data source items for the collectionView.
- Returns: An Array of DataSourceItem objects. - Returns: An Array of DataSourceItem objects.
*/ */
open var dataSourceItems: [DataSourceItem] { open fileprivate(set) var dataSourceItems: [DataSourceItem] {
get { get {
return card.dataSourceItems return collectionViewCard.dataSourceItems
} }
set(value) { set(value) {
card.dataSourceItems = value collectionViewCard.dataSourceItems = value
} }
} }
...@@ -160,8 +180,8 @@ open class Menu: Button { ...@@ -160,8 +180,8 @@ open class Menu: Button {
} }
open func reload() { open func reload() {
if 0 == card.width { if 0 == collectionViewCard.width {
card.width = Screen.bounds.width collectionViewCard.width = Screen.bounds.width - collectionViewCardEdgeInsets.left - collectionViewCardEdgeInsets.right
} }
} }
} }
...@@ -169,9 +189,9 @@ open class Menu: Button { ...@@ -169,9 +189,9 @@ open class Menu: Button {
extension Menu { extension Menu {
/// Prepares the card. /// Prepares the card.
fileprivate func prepareCard() { fileprivate func prepareCard() {
card.collectionView.delegate = self collectionViewCard.collectionView.delegate = self
card.collectionView.dataSource = self collectionViewCard.collectionView.dataSource = self
card.collectionView.register(MenuCollectionViewCell.self, forCellWithReuseIdentifier: "MenuCollectionViewCell") collectionViewCard.collectionView.register(MenuCollectionViewCell.self, forCellWithReuseIdentifier: "MenuCollectionViewCell")
} }
/// Prepares the handler. /// Prepares the handler.
...@@ -215,15 +235,25 @@ extension Menu { ...@@ -215,15 +235,25 @@ extension Menu {
return return
} }
guard nil == card.superview else { guard nil == collectionViewCard.superview else {
return return
} }
delegate?.menuWillOpen?(menu: self) delegate?.menuWillOpen?(menu: self)
switch direction { switch direction {
case .up, .down, .left, .right: case .up:
layout(card).bottom().centerHorizontally() layout(collectionViewCard).bottom().centerHorizontally()
case .down:
layout(collectionViewCard).top().centerHorizontally()
case .topLeft:
layout(collectionViewCard).topLeft()
case .topRight:
layout(collectionViewCard).topRight()
case .bottomLeft:
layout(collectionViewCard).bottomLeft()
case .bottomRight:
layout(collectionViewCard).bottomRight()
} }
isOpened = true isOpened = true
...@@ -238,7 +268,7 @@ extension Menu { ...@@ -238,7 +268,7 @@ extension Menu {
delegate?.menuWillClose?(menu: self) delegate?.menuWillClose?(menu: self)
card.removeFromSuperview() collectionViewCard.removeFromSuperview()
isOpened = false isOpened = false
...@@ -264,7 +294,7 @@ extension Menu { ...@@ -264,7 +294,7 @@ extension Menu {
extension Menu: CollectionViewDelegate { extension Menu: CollectionViewDelegate {
open func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { open func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
guard let menuItem = card.indexForDataSourceItems[indexPath] as? MenuItem else { guard let menuItem = collectionViewCard.indexForDataSourceItems[indexPath] as? MenuItem else {
return return
} }
...@@ -291,7 +321,7 @@ extension Menu: CollectionViewDataSource { ...@@ -291,7 +321,7 @@ extension Menu: CollectionViewDataSource {
return cell return cell
} }
card.indexForDataSourceItems[indexPath] = menuItem collectionViewCard.indexForDataSourceItems[indexPath] = menuItem
cell.menuItem = menuItem cell.menuItem = menuItem
cell.menuItem?.width = cell.width cell.menuItem?.width = cell.width
......
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