2016-07-10 2 views
0

У меня есть два созданных экрана UIButton, которые анимируются на экране при нажатии кнопки. Однако ни одна из целевых функций кнопки никогда не вызывается, поскольку я считаю, что кнопки не «нажаты». Кнопки работают, если я просто создаю их на экране, поэтому я считаю, что проблема связана с тем, что кнопки анимируются на экране из-за пределов экрана.Экранное действие UIButton не запускается - iOS

Редактировать: Кнопки правильно анимируются на экране и видны, однако при нажатии на них ничего не происходит.

Код:

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") 
} 

Любая помощь приветствуется. Благодаря!

ответ

1

Я не являюсь точной целью вашего перехода, но похоже, что вид, который удерживает кнопки 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 
}) 

Это базируется предположение, вы пытаетесь переместить окно на экран в целом.

Редактировать:

Ahh! Я вижу, что происходит! Таким образом, вы перемещаете self.view вверх, и вы никогда не хотите перемещать UIViewController.view. Переместите контейнер представления. Поэтому вместо перемещения self.view переместите button_view. Перемещение UIController.view удаляет все нижние слои и функциональные возможности UIViewController

+0

Кнопки видны после анимации. Разве это не означает, что их контейнер также будет на экране? – Dando18

+0

Так видимо, но не кликабельны? – impression7vx

+0

Правильно, и кнопки никогда не выделяются при нажатии, поэтому я предполагаю, что они отключены, или их кадр как-то выключен, но отладочные и 'print' -показания меня ни к чему не привели. – Dando18