未触发屏幕外 UIButton 操作 - iOS
Offscreen UIButton action not triggered - iOS
我在屏幕外创建了两个 UIButton
,当按下按钮时,它们会在屏幕上显示动画。但是,从来没有调用过按钮的目标函数,因为我相信按钮没有被调用 "pressed"。如果我只是在屏幕上创建按钮,它们就可以工作,所以我相信这个问题与从屏幕边界外动画到屏幕上的按钮有关。
编辑:按钮确实在屏幕上正确显示动画并且可见,但是按下它们没有任何反应。
代码:
var isMenuOpen : Bool = false
var button_height : CGFloat = UIScreen.mainScreen().bounds.height/8
var button_view : UIView!
var mylists : UIButton!
var settings : UIButton!
@IBAction func openMenu(sender: AnyObject) {
UIView.animateWithDuration(0.6, delay: 0.0, options: .CurveEaseOut, animations: {
self.view.transform = CGAffineTransformMakeTranslation(0.0, self.button_height * (self.isMenuOpen ? 0 : -1))
}, completion: {finished in
self.isMenuOpen = !self.isMenuOpen
})
}
override func viewDidLoad() {
super.viewDidLoad()
initButtons()
}
func initButtons() {
button_view = UIView(frame: CGRect(x:0.0, y:UIScreen.mainScreen().bounds.height, width:UIScreen.mainScreen().bounds.width, height:button_height))
button_view.userInteractionEnabled = true
mylists = UIButton(frame: CGRect(x:0.0, y:0.0, width:UIScreen.mainScreen().bounds.width/2.0, height:button_height))
mylists.setTitle("My Lists", forState: .Normal)
mylists.backgroundColor = UIColor(red: 255/255, green: 105/255, blue: 180/255, alpha: 1.0)
mylists.addTarget(self, action: #selector(showLists(_:)), forControlEvents: .TouchUpInside)
button_view.addSubview(mylists)
settings = UIButton(frame: CGRect(x:UIScreen.mainScreen().bounds.width/2.0, y:0.0, width:UIScreen.mainScreen().bounds.width/2.0, height:button_height))
settings.setTitle("Settings", forState: .Normal)
settings.backgroundColor = UIColor(red: 135/255, green: 205/255, blue: 236/255, alpha: 1.0)
settings.addTarget(self, action: #selector(showSettings(_:)), forControlEvents: .TouchUpInside)
button_view.addSubview(settings)
self.view.addSubview(button_view)
}
func showLists(sender: UIButton!) {
print("showLists")
}
func showSettings(sender: UIButton!) {
print("showSettings")
}
感谢任何帮助。谢谢!
我不知道你转换的确切目标,但看起来按住按钮 button_view
的视图永远不会转换到屏幕上。
您是想让每个按钮都显示在屏幕上,还是想让两个按钮都显示在容器内的屏幕上 (button_view_
)?如果你想两者都做,我建议你做
UIView.animateWithDuration(0.6, delay: 0.0, options: .CurveEaseOut, animations: {
self.button_view.transform = CGAffineTransformMakeTranslation(0.0, -1*(UIScreen.mainScreen().bounds.height))
}, completion: {finished in
self.isMenuOpen = !self.isMenuOpen
})
这是基于您尝试将框作为一个整体移动到屏幕的假设。
编辑:
啊!我明白发生了什么!所以你正在向上移动 self.view,你永远不想移动 UIViewController.view。移动视图的容器。因此,不是移动 self.view,而是移动 button_view。移动 UIController.view 会删除 UIViewController
的所有底层和功能
我在屏幕外创建了两个 UIButton
,当按下按钮时,它们会在屏幕上显示动画。但是,从来没有调用过按钮的目标函数,因为我相信按钮没有被调用 "pressed"。如果我只是在屏幕上创建按钮,它们就可以工作,所以我相信这个问题与从屏幕边界外动画到屏幕上的按钮有关。
编辑:按钮确实在屏幕上正确显示动画并且可见,但是按下它们没有任何反应。
代码:
var isMenuOpen : Bool = false
var button_height : CGFloat = UIScreen.mainScreen().bounds.height/8
var button_view : UIView!
var mylists : UIButton!
var settings : UIButton!
@IBAction func openMenu(sender: AnyObject) {
UIView.animateWithDuration(0.6, delay: 0.0, options: .CurveEaseOut, animations: {
self.view.transform = CGAffineTransformMakeTranslation(0.0, self.button_height * (self.isMenuOpen ? 0 : -1))
}, completion: {finished in
self.isMenuOpen = !self.isMenuOpen
})
}
override func viewDidLoad() {
super.viewDidLoad()
initButtons()
}
func initButtons() {
button_view = UIView(frame: CGRect(x:0.0, y:UIScreen.mainScreen().bounds.height, width:UIScreen.mainScreen().bounds.width, height:button_height))
button_view.userInteractionEnabled = true
mylists = UIButton(frame: CGRect(x:0.0, y:0.0, width:UIScreen.mainScreen().bounds.width/2.0, height:button_height))
mylists.setTitle("My Lists", forState: .Normal)
mylists.backgroundColor = UIColor(red: 255/255, green: 105/255, blue: 180/255, alpha: 1.0)
mylists.addTarget(self, action: #selector(showLists(_:)), forControlEvents: .TouchUpInside)
button_view.addSubview(mylists)
settings = UIButton(frame: CGRect(x:UIScreen.mainScreen().bounds.width/2.0, y:0.0, width:UIScreen.mainScreen().bounds.width/2.0, height:button_height))
settings.setTitle("Settings", forState: .Normal)
settings.backgroundColor = UIColor(red: 135/255, green: 205/255, blue: 236/255, alpha: 1.0)
settings.addTarget(self, action: #selector(showSettings(_:)), forControlEvents: .TouchUpInside)
button_view.addSubview(settings)
self.view.addSubview(button_view)
}
func showLists(sender: UIButton!) {
print("showLists")
}
func showSettings(sender: UIButton!) {
print("showSettings")
}
感谢任何帮助。谢谢!
我不知道你转换的确切目标,但看起来按住按钮 button_view
的视图永远不会转换到屏幕上。
您是想让每个按钮都显示在屏幕上,还是想让两个按钮都显示在容器内的屏幕上 (button_view_
)?如果你想两者都做,我建议你做
UIView.animateWithDuration(0.6, delay: 0.0, options: .CurveEaseOut, animations: {
self.button_view.transform = CGAffineTransformMakeTranslation(0.0, -1*(UIScreen.mainScreen().bounds.height))
}, completion: {finished in
self.isMenuOpen = !self.isMenuOpen
})
这是基于您尝试将框作为一个整体移动到屏幕的假设。
编辑:
啊!我明白发生了什么!所以你正在向上移动 self.view,你永远不想移动 UIViewController.view。移动视图的容器。因此,不是移动 self.view,而是移动 button_view。移动 UIController.view 会删除 UIViewController
的所有底层和功能