CosmicMind Swift Material 带有堆叠菜单的库程序化自动布局
CosmicMind Swift Material library programmatic autolayout with stacked menu
我正在为 swift 使用 CosmicMind 的 Material 库。我正在尝试让 Menu
示例与程序化自动版式一起工作 - 我在哪里可以找到如何实现这项工作的示例?
根据 Github 上的示例,我还没有找到使用自动布局的方法。
/// Prepares the FlatMenu example.
private func prepareFlatbMenuExample() {
let btn1: FlatButton = FlatButton()
btn1.addTarget(self, action: "handleFlatMenu", forControlEvents: .TouchUpInside)
btn1.setTitleColor(MaterialColor.white, forState: .Normal)
btn1.backgroundColor = MaterialColor.blue.accent3
btn1.pulseColor = MaterialColor.white
btn1.setTitle("Sweet", forState: .Normal)
view.addSubview(btn1)
let btn2: FlatButton = FlatButton()
btn2.setTitleColor(MaterialColor.blue.accent3, forState: .Normal)
btn2.borderColor = MaterialColor.blue.accent3
btn2.pulseColor = MaterialColor.blue.accent3
btn2.borderWidth = .Border1
btn2.setTitle("Good", forState: .Normal)
view.addSubview(btn2)
let btn3: FlatButton = FlatButton()
btn3.setTitleColor(MaterialColor.blue.accent3, forState: .Normal)
btn3.borderColor = MaterialColor.blue.accent3
btn3.pulseColor = MaterialColor.blue.accent3
btn3.borderWidth = .Border1
btn3.setTitle("Nice", forState: .Normal)
view.addSubview(btn3)
// Initialize the menu and setup the configuration options.
flatMenu = Menu(origin: CGPointMake(spacing, view.bounds.height - height - spacing))
flatMenu.direction = .Down
flatMenu.spacing = 8
flatMenu.buttonSize = CGSizeMake(120, height)
flatMenu.buttons = [btn1, btn2, btn3]
}
flatMenu
属于 Material 库中的 Menu
类型,并且是包含菜单中每个按钮的 class。看起来 "origin" 是控制页面定位的,但是因为 Menu
不是 UIView subclass,我不确定如何将它与自动布局一起使用。
public class Menu {
...
}
按钮在哪个视图中?尝试使用与按钮大小相同的尺寸使用 AutoLayout 定位超级视图,然后将菜单的原点设置为 CGRectZero。
还要确保将父视图的 clipsToBounds 设置为 false(默认值)。并且因为按钮位于自动布局放置视图的边界之外,所以您需要使用自定义 UIView 子类(如下所示)来处理按钮上的操作。
class MenuParentView: UIView {
override func hitTest(point: CGPoint, withEvent event: UIEvent?) -> UIView? {
//because the subviews will be outside the bounds of this view
//we need to look at the subviews to see if we have a hit
for subview in self.subviews {
let pointForTargetView = subview.convertPoint(point, fromView: self)
if CGRectContainsPoint(subview.bounds, pointForTargetView) {
return subview.hitTest(pointForTargetView, withEvent: event)
}
}
return super.hitTest(point, withEvent: event)
}
}
我正在为 swift 使用 CosmicMind 的 Material 库。我正在尝试让 Menu
示例与程序化自动版式一起工作 - 我在哪里可以找到如何实现这项工作的示例?
根据 Github 上的示例,我还没有找到使用自动布局的方法。
/// Prepares the FlatMenu example.
private func prepareFlatbMenuExample() {
let btn1: FlatButton = FlatButton()
btn1.addTarget(self, action: "handleFlatMenu", forControlEvents: .TouchUpInside)
btn1.setTitleColor(MaterialColor.white, forState: .Normal)
btn1.backgroundColor = MaterialColor.blue.accent3
btn1.pulseColor = MaterialColor.white
btn1.setTitle("Sweet", forState: .Normal)
view.addSubview(btn1)
let btn2: FlatButton = FlatButton()
btn2.setTitleColor(MaterialColor.blue.accent3, forState: .Normal)
btn2.borderColor = MaterialColor.blue.accent3
btn2.pulseColor = MaterialColor.blue.accent3
btn2.borderWidth = .Border1
btn2.setTitle("Good", forState: .Normal)
view.addSubview(btn2)
let btn3: FlatButton = FlatButton()
btn3.setTitleColor(MaterialColor.blue.accent3, forState: .Normal)
btn3.borderColor = MaterialColor.blue.accent3
btn3.pulseColor = MaterialColor.blue.accent3
btn3.borderWidth = .Border1
btn3.setTitle("Nice", forState: .Normal)
view.addSubview(btn3)
// Initialize the menu and setup the configuration options.
flatMenu = Menu(origin: CGPointMake(spacing, view.bounds.height - height - spacing))
flatMenu.direction = .Down
flatMenu.spacing = 8
flatMenu.buttonSize = CGSizeMake(120, height)
flatMenu.buttons = [btn1, btn2, btn3]
}
flatMenu
属于 Material 库中的 Menu
类型,并且是包含菜单中每个按钮的 class。看起来 "origin" 是控制页面定位的,但是因为 Menu
不是 UIView subclass,我不确定如何将它与自动布局一起使用。
public class Menu {
...
}
按钮在哪个视图中?尝试使用与按钮大小相同的尺寸使用 AutoLayout 定位超级视图,然后将菜单的原点设置为 CGRectZero。
还要确保将父视图的 clipsToBounds 设置为 false(默认值)。并且因为按钮位于自动布局放置视图的边界之外,所以您需要使用自定义 UIView 子类(如下所示)来处理按钮上的操作。
class MenuParentView: UIView {
override func hitTest(point: CGPoint, withEvent event: UIEvent?) -> UIView? {
//because the subviews will be outside the bounds of this view
//we need to look at the subviews to see if we have a hit
for subview in self.subviews {
let pointForTargetView = subview.convertPoint(point, fromView: self)
if CGRectContainsPoint(subview.bounds, pointForTargetView) {
return subview.hitTest(pointForTargetView, withEvent: event)
}
}
return super.hitTest(point, withEvent: event)
}
}