Commit bfa2cd30 by danieldahan

removed MenuView for lighter-weighted MenuLayout approach

parent 1c8824e5
......@@ -36,19 +36,19 @@ import UIKit
import Material
class ViewController: UIViewController {
private var menuView: MenuView!
private var menuView: MenuLayout!
override func viewDidLoad() {
super.viewDidLoad()
prepareView()
prepareMenuViewExample()
prepareMenuLayoutExample()
}
internal func handleOpenMenuView() {
internal func handleOpenMenuLayout() {
if menuView.opened {
menuView.close()
} else {
menuView.open() { (item: MenuViewItem) in
menuView.open() { (item: MenuLayoutItem) in
(item.button as? MaterialButton)?.pulse()
}
}
......@@ -59,45 +59,54 @@ class ViewController: UIViewController {
view.backgroundColor = MaterialColor.white
}
/// Prepares the MenuView example.
private func prepareMenuViewExample() {
/// Prepares the MenuLayout example.
private func prepareMenuLayoutExample() {
let btn: FlatButton = FlatButton(frame: CGRectMake(100, 100, 100, 100))
btn.backgroundColor = MaterialColor.red.base
let image: UIImage? = UIImage(named: "ic_add_white")
let btn1: FabButton = FabButton()
btn1.depth = .None
btn1.setImage(image, forState: .Normal)
btn1.setImage(image, forState: .Highlighted)
btn1.addTarget(self, action: "handleOpenMenuView", forControlEvents: .TouchUpInside)
btn1.addTarget(self, action: "handleOpenMenuLayout", forControlEvents: .TouchUpInside)
view.addSubview(btn1)
let btn2: FabButton = FabButton()
btn2.depth = .None
btn2.backgroundColor = MaterialColor.blue.base
btn2.setImage(image, forState: .Normal)
btn2.setImage(image, forState: .Highlighted)
view.addSubview(btn2)
let btn3: FabButton = FabButton()
btn3.depth = .None
btn3.backgroundColor = MaterialColor.green.base
btn3.setImage(image, forState: .Normal)
btn3.setImage(image, forState: .Highlighted)
view.addSubview(btn3)
let btn4: FabButton = FabButton()
btn4.depth = .None
btn4.backgroundColor = MaterialColor.yellow.base
btn4.setImage(image, forState: .Normal)
btn4.setImage(image, forState: .Highlighted)
view.addSubview(btn4)
menuView = MenuView(frame: view.bounds)
// menuView.menuPosition = .BottomLeft
// menuView.menuDirection = .Up
menuView = MenuLayout()
menuView.menuPosition = .TopRight
menuView.menuDirection = .Left
menuView.baseSize = CGSizeMake(36, 36)
menuView.itemSize = CGSizeMake(36, 36)
view.addSubview(menuView)
view.addSubview(btn)
menuView.menuItems = [
MenuViewItem(button: btn1),
MenuViewItem(button: btn2),
MenuViewItem(button: btn3),
MenuViewItem(button: btn4)
MenuLayoutItem(button: btn1),
MenuLayoutItem(button: btn2),
MenuLayoutItem(button: btn3),
MenuLayoutItem(button: btn4)
]
}
}
......
......@@ -7,7 +7,7 @@
objects = {
/* Begin PBXBuildFile section */
65FDC2EB1C66858A00103AC2 /* MenuView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65FDC2EA1C66858A00103AC2 /* MenuView.swift */; };
65FDC2EB1C66858A00103AC2 /* MenuLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65FDC2EA1C66858A00103AC2 /* MenuLayout.swift */; };
960B23271C383E5500E96216 /* Material+String.swift in Sources */ = {isa = PBXBuildFile; fileRef = 960B23261C383E5500E96216 /* Material+String.swift */; };
960B232E1C383EAA00E96216 /* Material+UIImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 960B23281C383EAA00E96216 /* Material+UIImage.swift */; };
960B232F1C383EAA00E96216 /* Material+UIImage+Crop.swift in Sources */ = {isa = PBXBuildFile; fileRef = 960B23291C383EAA00E96216 /* Material+UIImage+Crop.swift */; };
......@@ -115,7 +115,7 @@
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
65FDC2EA1C66858A00103AC2 /* MenuView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MenuView.swift; sourceTree = "<group>"; };
65FDC2EA1C66858A00103AC2 /* MenuLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MenuLayout.swift; sourceTree = "<group>"; };
960B23261C383E5500E96216 /* Material+String.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Material+String.swift"; sourceTree = "<group>"; };
960B23281C383EAA00E96216 /* Material+UIImage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Material+UIImage.swift"; sourceTree = "<group>"; };
960B23291C383EAA00E96216 /* Material+UIImage+Crop.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Material+UIImage+Crop.swift"; sourceTree = "<group>"; };
......@@ -393,7 +393,7 @@
children = (
96D88C151C1328D800B91418 /* NavigationBarView.swift */,
96D88C1D1C1328D800B91418 /* SideNavigationViewController.swift */,
65FDC2EA1C66858A00103AC2 /* MenuView.swift */,
65FDC2EA1C66858A00103AC2 /* MenuLayout.swift */,
);
name = Navigation;
sourceTree = "<group>";
......@@ -585,7 +585,7 @@
96D88C3E1C1328D800B91418 /* NavigationBarView.swift in Sources */,
96D88C221C1328D800B91418 /* FabButton.swift in Sources */,
96D88C3F1C1328D800B91418 /* RaisedButton.swift in Sources */,
65FDC2EB1C66858A00103AC2 /* MenuView.swift in Sources */,
65FDC2EB1C66858A00103AC2 /* MenuLayout.swift in Sources */,
960B23311C383EAA00E96216 /* Material+UIImage+PhotoLibrary.swift in Sources */,
960B23321C383EAA00E96216 /* Material+UIImage+Resize.swift in Sources */,
96D88C3C1C1328D800B91418 /* MaterialTransitionAnimation.swift in Sources */,
......
......@@ -30,21 +30,21 @@
import UIKit
public enum MenuViewDirection {
public enum MenuLayoutDirection {
case Up
case Down
case Left
case Right
}
public enum MenuViewPosition {
public enum MenuLayoutPosition {
case TopLeft
case TopRight
case BottomLeft
case BottomRight
}
public struct MenuViewItem {
public struct MenuLayoutItem {
/// UIButton.
public var button: UIButton
......@@ -57,22 +57,25 @@ public struct MenuViewItem {
}
}
public class MenuView : MaterialView {
public class MenuLayout {
public var width: CGFloat = UIScreen.mainScreen().bounds.width
public var height: CGFloat = UIScreen.mainScreen().bounds.height
/// A Boolean that indicates if the menu is open or not.
public private(set) var opened: Bool = false
/// The position of the menu.
public var menuPosition: MenuViewPosition = .BottomRight {
public var menuPosition: MenuLayoutPosition = .BottomRight {
didSet {
reloadView()
}
}
/// The direction in which the animation opens the menu.
public var menuDirection: MenuViewDirection = .Up
public var menuDirection: MenuLayoutDirection = .Up
/// An Array of MenuViewItems.
public var menuItems: Array<MenuViewItem>? {
/// An Array of MenuLayoutItems.
public var menuItems: Array<MenuLayoutItem>? {
didSet {
reloadView()
}
......@@ -82,12 +85,11 @@ public class MenuView : MaterialView {
public var baseSize: CGSize = CGSizeMake(56, 56)
public func reloadView() {
// Clear the subviews.
for v in subviews {
v.removeFromSuperview()
}
public init() {
}
public func reloadView() {
switch menuPosition {
case .TopLeft:
layoutTopLeft()
......@@ -100,7 +102,7 @@ public class MenuView : MaterialView {
}
}
public func open(completion: ((MenuViewItem) -> Void)? = nil) {
public func open(completion: ((MenuLayoutItem) -> Void)? = nil) {
switch menuDirection {
case .Up:
openUpAnimation(completion)
......@@ -113,7 +115,7 @@ public class MenuView : MaterialView {
}
}
public func close(completion: ((MenuViewItem) -> Void)? = nil) {
public func close(completion: ((MenuLayoutItem) -> Void)? = nil) {
switch menuDirection {
case .Up:
closeUpAnimation(completion)
......@@ -126,14 +128,14 @@ public class MenuView : MaterialView {
}
}
private func openUpAnimation(completion: ((MenuViewItem) -> Void)? = nil) {
if let v: Array<MenuViewItem> = menuItems {
var base: MenuViewItem?
private func openUpAnimation(completion: ((MenuLayoutItem) -> Void)? = nil) {
if let v: Array<MenuLayoutItem> = menuItems {
var base: MenuLayoutItem?
for var i: Int = 1, l: Int = v.count; i < l; ++i {
if nil == base {
base = v[0]
}
let item: MenuViewItem = v[i]
let item: MenuLayoutItem = v[i]
item.button.hidden = false
UIView.animateWithDuration(Double(i) * 0.15,
animations: { [unowned self] in
......@@ -148,10 +150,10 @@ public class MenuView : MaterialView {
}
}
public func closeUpAnimation(completion: ((MenuViewItem) -> Void)? = nil) {
if let v: Array<MenuViewItem> = menuItems {
public func closeUpAnimation(completion: ((MenuLayoutItem) -> Void)? = nil) {
if let v: Array<MenuLayoutItem> = menuItems {
for var i: Int = 1, l: Int = v.count; i < l; ++i {
let item: MenuViewItem = v[i]
let item: MenuLayoutItem = v[i]
UIView.animateWithDuration(0.15,
animations: { [unowned self] in
item.button.alpha = 0
......@@ -166,14 +168,14 @@ public class MenuView : MaterialView {
}
}
private func openDownAnimation(completion: ((MenuViewItem) -> Void)? = nil) {
if let v: Array<MenuViewItem> = menuItems {
var base: MenuViewItem?
private func openDownAnimation(completion: ((MenuLayoutItem) -> Void)? = nil) {
if let v: Array<MenuLayoutItem> = menuItems {
var base: MenuLayoutItem?
for var i: Int = 1, l: Int = v.count; i < l; ++i {
if nil == base {
base = v[0]
}
let item: MenuViewItem = v[i]
let item: MenuLayoutItem = v[i]
item.button.hidden = false
UIView.animateWithDuration(Double(i) * 0.15,
animations: { [unowned self] in
......@@ -188,10 +190,10 @@ public class MenuView : MaterialView {
}
}
public func closeDownAnimation(completion: ((MenuViewItem) -> Void)? = nil) {
if let v: Array<MenuViewItem> = menuItems {
public func closeDownAnimation(completion: ((MenuLayoutItem) -> Void)? = nil) {
if let v: Array<MenuLayoutItem> = menuItems {
for var i: Int = 1, l: Int = v.count; i < l; ++i {
let item: MenuViewItem = v[i]
let item: MenuLayoutItem = v[i]
UIView.animateWithDuration(0.15,
animations: {
item.button.alpha = 0
......@@ -206,14 +208,14 @@ public class MenuView : MaterialView {
}
}
private func openLeftAnimation(completion: ((MenuViewItem) -> Void)? = nil) {
if let v: Array<MenuViewItem> = menuItems {
var base: MenuViewItem?
private func openLeftAnimation(completion: ((MenuLayoutItem) -> Void)? = nil) {
if let v: Array<MenuLayoutItem> = menuItems {
var base: MenuLayoutItem?
for var i: Int = 1, l: Int = v.count; i < l; ++i {
if nil == base {
base = v[0]
}
let item: MenuViewItem = v[i]
let item: MenuLayoutItem = v[i]
item.button.hidden = false
UIView.animateWithDuration(Double(i) * 0.15,
animations: { [unowned self] in
......@@ -228,10 +230,10 @@ public class MenuView : MaterialView {
}
}
public func closeLeftAnimation(completion: ((MenuViewItem) -> Void)? = nil) {
if let v: Array<MenuViewItem> = menuItems {
public func closeLeftAnimation(completion: ((MenuLayoutItem) -> Void)? = nil) {
if let v: Array<MenuLayoutItem> = menuItems {
for var i: Int = 1, l: Int = v.count; i < l; ++i {
let item: MenuViewItem = v[i]
let item: MenuLayoutItem = v[i]
UIView.animateWithDuration(0.15,
animations: { [unowned self] in
item.button.alpha = 0
......@@ -246,14 +248,14 @@ public class MenuView : MaterialView {
}
}
private func openRightAnimation(completion: ((MenuViewItem) -> Void)? = nil) {
if let v: Array<MenuViewItem> = menuItems {
var base: MenuViewItem?
private func openRightAnimation(completion: ((MenuLayoutItem) -> Void)? = nil) {
if let v: Array<MenuLayoutItem> = menuItems {
var base: MenuLayoutItem?
for var i: Int = 1, l: Int = v.count; i < l; ++i {
if nil == base {
base = v[0]
}
let item: MenuViewItem = v[i]
let item: MenuLayoutItem = v[i]
item.button.hidden = false
UIView.animateWithDuration(Double(i) * 0.15,
animations: { [unowned self] in
......@@ -268,10 +270,10 @@ public class MenuView : MaterialView {
}
}
public func closeRightAnimation(completion: ((MenuViewItem) -> Void)? = nil) {
if let v: Array<MenuViewItem> = menuItems {
public func closeRightAnimation(completion: ((MenuLayoutItem) -> Void)? = nil) {
if let v: Array<MenuLayoutItem> = menuItems {
for var i: Int = 1, l: Int = v.count; i < l; ++i {
let item: MenuViewItem = v[i]
let item: MenuLayoutItem = v[i]
UIView.animateWithDuration(0.15,
animations: {
item.button.alpha = 0
......@@ -287,80 +289,80 @@ public class MenuView : MaterialView {
}
private func layoutTopLeft() {
if let v: Array<MenuViewItem> = menuItems {
if let v: Array<MenuLayoutItem> = menuItems {
for var i: Int = 0, l: Int = v.count; i < l; ++i {
let item: MenuViewItem = v[i]
let item: MenuLayoutItem = v[i]
if 0 == i {
item.button.frame.size = baseSize
item.button.frame.origin.x = 16
item.button.frame.origin.y = 16
addSubview(item.button)
item.button.layer.zPosition = 10000
} else {
item.button.alpha = 0
item.button.frame.size = itemSize
item.button.frame.origin.x = (baseSize.width - itemSize.width) / 2 + 16
item.button.frame.origin.y = (baseSize.height - itemSize.height) / 2 + 16
insertSubview(item.button, belowSubview: v[i - 1].button)
item.button.layer.zPosition = CGFloat(10000 - i)
}
}
}
}
private func layoutTopRight() {
if let v: Array<MenuViewItem> = menuItems {
if let v: Array<MenuLayoutItem> = menuItems {
for var i: Int = 0, l: Int = v.count; i < l; ++i {
let item: MenuViewItem = v[i]
let item: MenuLayoutItem = v[i]
if 0 == i {
item.button.frame.size = baseSize
item.button.frame.origin.x = width - baseSize.width - 16
item.button.frame.origin.y = 16
addSubview(item.button)
item.button.layer.zPosition = 10000
} else {
item.button.alpha = 0
item.button.frame.size = itemSize
item.button.frame.origin.x = width - (baseSize.width + itemSize.width) / 2 - 16
item.button.frame.origin.y = (baseSize.height - itemSize.height) / 2 + 16
insertSubview(item.button, belowSubview: v[i - 1].button)
item.button.layer.zPosition = CGFloat(10000 - i)
}
}
}
}
private func layoutBottomLeft() {
if let v: Array<MenuViewItem> = menuItems {
if let v: Array<MenuLayoutItem> = menuItems {
for var i: Int = 0, l: Int = v.count; i < l; ++i {
let item: MenuViewItem = v[i]
let item: MenuLayoutItem = v[i]
if 0 == i {
item.button.frame.size = baseSize
item.button.frame.origin.x = 16
item.button.frame.origin.y = height - baseSize.height - 16
addSubview(item.button)
item.button.layer.zPosition = 10000
} else {
item.button.alpha = 0
item.button.frame.size = itemSize
item.button.frame.origin.x = (baseSize.width - itemSize.width) / 2 + 16
item.button.frame.origin.y = height - (baseSize.height + itemSize.height) / 2 - 16
insertSubview(item.button, belowSubview: v[i - 1].button)
item.button.layer.zPosition = CGFloat(10000 - i)
}
}
}
}
private func layoutBottomRight() {
if let v: Array<MenuViewItem> = menuItems {
if let v: Array<MenuLayoutItem> = menuItems {
for var i: Int = 0, l: Int = v.count; i < l; ++i {
let item: MenuViewItem = v[i]
let item: MenuLayoutItem = v[i]
if 0 == i {
item.button.frame.size = baseSize
item.button.frame.origin.x = width - baseSize.width - 16
item.button.frame.origin.y = height - baseSize.height - 16
addSubview(item.button)
item.button.layer.zPosition = 10000
} else {
item.button.alpha = 0
item.button.frame.size = itemSize
item.button.frame.origin.x = width - (baseSize.width + itemSize.width) / 2 - 16
item.button.frame.origin.y = height - (baseSize.height + itemSize.height) / 2 - 16
insertSubview(item.button, belowSubview: v[i - 1].button)
item.button.layer.zPosition = CGFloat(10000 - i)
}
}
}
......
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