Commit 595208d2 by danieldahan

opening animation has correct alignment

parent ea7542d1
...@@ -36,12 +36,22 @@ import UIKit ...@@ -36,12 +36,22 @@ import UIKit
import Material import Material
class ViewController: UIViewController { class ViewController: UIViewController {
private var menuView: MenuView!
override func viewDidLoad() { override func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()
prepareView() prepareView()
prepareMenuViewExample() prepareMenuViewExample()
} }
internal func handleOpenMenuView() {
if menuView.opened {
menuView.close()
} else {
menuView.open()
}
}
/// General preparation statements are placed here. /// General preparation statements are placed here.
private func prepareView() { private func prepareView() {
view.backgroundColor = MaterialColor.white view.backgroundColor = MaterialColor.white
...@@ -50,11 +60,26 @@ class ViewController: UIViewController { ...@@ -50,11 +60,26 @@ class ViewController: UIViewController {
/// Prepares the MenuView example. /// Prepares the MenuView example.
private func prepareMenuViewExample() { private func prepareMenuViewExample() {
let btn1: FabButton = FabButton() let btn1: FabButton = FabButton()
btn1.addTarget(self, action: "handleOpenMenuView", forControlEvents: .TouchUpInside)
let btn2: FabButton = FabButton()
btn2.backgroundColor = MaterialColor.blue.base
let btn3: FabButton = FabButton()
btn3.backgroundColor = MaterialColor.green.base
let btn4: FabButton = FabButton()
btn4.backgroundColor = MaterialColor.yellow.base
let menuView: MenuView = MenuView(frame: view.bounds) menuView = MenuView(frame: view.bounds)
view.addSubview(menuView) view.addSubview(menuView)
menuView.menuItems = [MenuViewItem(button: btn1)] menuView.menuItems = [
MenuViewItem(button: btn1),
MenuViewItem(button: btn2),
MenuViewItem(button: btn3),
MenuViewItem(button: btn4)
]
} }
} }
...@@ -44,13 +44,17 @@ public struct MenuViewItem { ...@@ -44,13 +44,17 @@ public struct MenuViewItem {
} }
public class MenuView : MaterialView { public class MenuView : MaterialView {
public private(set) var opened: Bool = false
public var menuItems: Array<MenuViewItem>? { public var menuItems: Array<MenuViewItem>? {
didSet { didSet {
reloadView() reloadView()
} }
} }
public var itemSize: CGSize = CGSizeMake(56, 56) public var itemSize: CGSize = CGSizeMake(48, 48)
public var baseItemSize: CGSize = CGSizeMake(56, 56)
public func reloadView() { public func reloadView() {
// Clear the subviews. // Clear the subviews.
...@@ -61,16 +65,53 @@ public class MenuView : MaterialView { ...@@ -61,16 +65,53 @@ public class MenuView : MaterialView {
if let v: Array<MenuViewItem> = menuItems { if let v: Array<MenuViewItem> = menuItems {
for var i: Int = 0, l: Int = v.count; i < l; ++i { for var i: Int = 0, l: Int = v.count; i < l; ++i {
let item: MenuViewItem = v[i] let item: MenuViewItem = v[i]
item.button.frame.size = itemSize
item.button.frame.origin.x = width - itemSize.width - 16
item.button.frame.origin.y = height - itemSize.height - 16
if 0 == i { if 0 == i {
item.button.frame.size = baseItemSize
item.button.frame.origin.x = width - baseItemSize.width - 16
item.button.frame.origin.y = height - baseItemSize.height - 16
addSubview(item.button) addSubview(item.button)
} else { } else {
item.button.hidden = true item.button.hidden = true
item.button.frame.size = itemSize
item.button.frame.origin.x = width - (baseItemSize.width + itemSize.width) / 2 - 16
item.button.frame.origin.y = height - itemSize.height - 16
insertSubview(item.button, belowSubview: v[i - 1].button) insertSubview(item.button, belowSubview: v[i - 1].button)
} }
} }
} }
} }
public func open() {
if let v: Array<MenuViewItem> = menuItems {
for var i: Int = 1, l: Int = v.count; i < l; ++i {
let item: MenuViewItem = v[i]
UIView.animateWithDuration(Double(i) * 0.15,
animations: { [unowned self] in
item.button.hidden = false
item.button.center.y = self.height - CGFloat(i + 1) * (item.button.bounds.height) - CGFloat(i) * 16
},
completion: { _ in
(item.button as? MaterialButton)?.pulse()
})
}
opened = true
}
}
public func close() {
if let v: Array<MenuViewItem> = menuItems {
for var i: Int = 1, l: Int = v.count; i < l; ++i {
let item: MenuViewItem = v[i]
UIView.animateWithDuration(0.15,
animations: { [unowned self] in
item.button.center.y = self.height - item.button.bounds.height - 16
},
completion: { _ in
item.button.hidden = true
})
}
opened = false
}
}
} }
\ 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