简体   繁体   中英

How to programmaticaly add button in iOS game app swift 3?

Can someone explain the code for a programatically added button in an iOS game application for swift 3 Xcode 8? All the other threads on this topic we're in single view and didn't work for me. I couldn't figure out how to add buttons to the game app Main.storyboard, so I'm trying to make a programattically added button. This is the code I'm trying to use now but doesn't work:

var playAgain = UIButton()
        playAgain.setTitle("Play Again", for: .normal)
        playAgain.setTitleColor(UIColor.black, for: .normal)
        playAgain.backgroundColor = SKColor.green

        playAgain.layer.borderWidth = 2
        playAgain.layer.cornerRadius = 18

        playAgain.frame = CGRect(x: (self.frame.width)/2, y: (self.frame.height)/2, width: 100, height: 36)
        self.view?.addSubview(playAgain)

Why would the buttons in single view be different in game apps? Also, when(and if) this is created, how would I modify the Touches ended method to know when the button was touched?

There is another way to create a button programmatically. You can create an empty UIView and override touch method. Also you are able to process touch event on this view and simulate buttons action. I think this is a fastest way for you.

Your code is adding the button to the .view , but using the coordinate system of the SKScene . So, your button is there, just not in view.

Assuming you want the button to be centered on the screen (at least, for now), change the placement to:

    playAgain.frame = CGRect(x: 0, y: 0, width: 100, height: 36)
    playAgain.center = (self.view?.center)!
    self.view?.addSubview(playAgain)

This will put the button above the game scene (z-layer, that is), so you can use normal button tap without needing to deal with touches . So, right after you add the button:

    self.view?.addSubview(playAgain)
    playAgain.addTarget(self, action: #selector(playAgainTapped(_:)), for: .touchUpInside)

and then elsewhere in your class:

    func playAgainTapped(_ sender: Any?) -> Void {
        print("Play again was Tapped!")
        // take whatever action you want here
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM