How to change size of UIButton if it is a certain size

时间:2016-02-12 19:44:51

标签: ios swift if-statement uibutton sender

I have looked at and tried many things but cannot find a way that will. What I am trying to do is create an if statement in my code that states that if one of the sender(a UIButton)'s dimensions, either height or width, are below 50, they would become a 50 x 50 UIButton equal to a randomColor() and randomPoint(). Thank you. Below is my code.

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var scoreLabel: UILabel!

    var points: Int = 0

    func randomPoint() -> CGPoint {
        let randomPoint: CGPoint = CGPoint(x:CGFloat(arc4random()%320),y:CGFloat(arc4random()%568))
        return randomPoint
    }

    func randomColor() -> UIColor {
        let red = CGFloat(drand48())
        let green = CGFloat(drand48())
        let blue = CGFloat(drand48())
        return UIColor(red: red, green: green, blue: blue, alpha: 1.0)
    }

    func spawnEnemy() {
        let enemy: UIButton = UIButton(frame: CGRect(x: 160, y: 160, width: 150, height: 150))
        enemy.backgroundColor = randomColor()
        enemy.center = randomPoint()
        enemy.addTarget(self, action: Selector("buttonPushed:"), forControlEvents: UIControlEvents.TouchUpInside)
        self.view.addSubview(enemy)
    }

    func buttonPushed(sender : UIButton) {
        sender.backgroundColor = UIColor.blackColor()
        points = points + 1
        scoreLabel.textAlignment = .Center
        scoreLabel.text = "\(points)"
        scoreLabel.backgroundColor = UIColor.blackColor()
    }

    override func viewDidLoad() {
        super.viewDidLoad()



        NSTimer.scheduledTimerWithTimeInterval(0.75, target: self, selector: Selector("spawnEnemy"), userInfo: nil, repeats: true)

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()

    }

}

I have updated my code but I still do not think it is working. I think it is because a lot of the time the squares are left as "L"s after a full overlapping square is clicked and you are left with an "L". Any way to fix this and make it so if will always work. My code is below in case it is actually or also something else?

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var scoreLabel: UILabel!

    var points: Int = 0

    func randomPoint() -> CGPoint {
        let randomPoint: CGPoint = CGPoint(x:CGFloat(arc4random()%320),y:CGFloat(arc4random()%568))
        return randomPoint
    }

    func randomColor() -> UIColor {
        let red = CGFloat(drand48())
        let green = CGFloat(drand48())
        let blue = CGFloat(drand48())
        return UIColor(red: red, green: green, blue: blue, alpha: 1.0)
    }

    func spawnEnemy() {
        let enemy: UIButton = UIButton(frame: CGRect(x: 160, y: 160, width: 150, height: 150))
        enemy.backgroundColor = randomColor()
        enemy.center = randomPoint()
        enemy.addTarget(self, action: Selector("buttonPushed:"), forControlEvents: UIControlEvents.TouchUpInside)
        self.view.addSubview(enemy)
    }

    func buttonPushed(sender : UIButton) {
        sender.backgroundColor = UIColor.blackColor()
        points = points + 1
        scoreLabel.textAlignment = .Center
        scoreLabel.text = "\(points)"
        scoreLabel.backgroundColor = UIColor.blackColor()
        if sender.frame.height < 50 || sender.frame.width < 50 {
            sender.frame = CGRectMake(sender.frame.origin.x, sender.frame.origin.y, 50, 50)
            sender.backgroundColor = self.randomColor()
            sender.center = self.randomPoint()
            return
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()



        NSTimer.scheduledTimerWithTimeInterval(0.75, target: self, selector: Selector("spawnEnemy"), userInfo: nil, repeats: true)

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()

    }

}

1 个答案:

答案 0 :(得分:0)

If you're looking to make this check after the user pushes the button, you can add a check inside your buttonPressed: function like this:

func buttonPushed(sender : UIButton) {
    if sender.frame.height < 50 || sender.frame.width < 50 {
        sender.frame = CGRectMake(sender.frame.origin.x, sender.frame.origin.y, 50, 50)
        sender.backgroundColor = self.randomColor()
        sender.center = self.randomPoint()
        return
    }
    sender.backgroundColor = UIColor.blackColor()
    points = points + 1
    scoreLabel.textAlignment = .Center
    scoreLabel.text = "\(points)"
    scoreLabel.backgroundColor = UIColor.blackColor()
}

This will see if the height or width is less than 50 points, and if it is it'll set the size to 50x50, set it to a random color, and set the center to the random point. It'll be an instant jump, though, so if you want to animate that you can do that instead. The return part will just ensure the rest of the code below doesn't get executed.