ios - Swift - 在横向时创建 UIButton

标签 ios swift uibutton constraints programmatically-created

我正在 iOS 9、Swift 和 Xcode 7 中制作一个计算器应用程序,我想知道如何在用户仅切换到横向模式时创建 UIButton。在数字和 AC Button 的左侧添加更多运算符并更改 constraints,移动按钮以为新按钮腾出空间。 iOS 的基本计算器可以做到这一点,我想知道怎么做?

我是 iOS 开发的新手,我一直在浏览网页,只找到一个名为:viewWillTransitionToSize() 的覆盖函数。这是做这种事情的正确功能吗?

此外,每次我进入横向 View 时,都会创建另一个按钮。我怎样才能阻止这种情况发生? enter image description here

enter image description here

enter image description here

附件是我以编程方式创建的 UIbutton 和上面列出的函数。

对于一系列问题/问题,我们深表歉意。我很难找到有关此问题的教程或帮助。任何指导或解决方案都会有所帮助。非常感谢。

ViewController.swift

import UIKit


class ViewController: UIViewController {

    @IBOutlet weak var outputDisplay: UILabel!

    @IBOutlet weak var number7: UIButton!
    @IBOutlet weak var number1: UIButton!
    @IBOutlet weak var number2: UIButton!
    @IBOutlet weak var number3: UIButton!
    @IBOutlet weak var number4: UIButton!
    @IBOutlet weak var number5: UIButton!
    @IBOutlet weak var number6: UIButton!
    @IBOutlet weak var number9: UIButton!
    @IBOutlet weak var number8: UIButton!
    @IBOutlet weak var numberZero: UIButton!
    @IBOutlet weak var decimalPoint: UIButton!
    @IBOutlet weak var plusMinusToggle: UIButton!
    @IBOutlet weak var acClear: UIButton!
    @IBOutlet weak var equalButton: UIButton!
    @IBOutlet weak var multiply: UIButton!
    @IBOutlet weak var divide: UIButton!
    @IBOutlet weak var subtraction: UIButton!
    @IBOutlet weak var addition: UIButton!
    @IBOutlet weak var deletion: UIButton!
    @IBOutlet weak var squareRoot: UIButton!

    var typing:Bool = false
    var firstNumber: Float = 0.0
    var secondNumber: Float = 0.0
    var operation:String = ""
    var result: Float = 0.0

    var valueToPass: Float = 0.0

    override func viewDidLoad() {
        super.viewDidLoad()

        number1.layer.cornerRadius = number1.bounds.size.width / 8.0
        number2.layer.cornerRadius = number2.bounds.size.width / 8.0
        number3.layer.cornerRadius = number3.bounds.size.width / 8.0
        number4.layer.cornerRadius = number4.bounds.size.width / 8.0
        number5.layer.cornerRadius = number5.bounds.size.width / 8.0
        number6.layer.cornerRadius = number6.bounds.size.width / 8.0
        number7.layer.cornerRadius = number7.bounds.size.width / 8.0
        number8.layer.cornerRadius = number8.bounds.size.width / 8.0
        number9.layer.cornerRadius = number9.bounds.size.width / 8.0
        numberZero.layer.cornerRadius = numberZero.bounds.size.width / 8.0
        equalButton.layer.cornerRadius = equalButton.bounds.size.width / 8.0
        deletion.layer.cornerRadius = deletion.bounds.size.width / 8.0
        plusMinusToggle.layer.cornerRadius = plusMinusToggle.bounds.size.width / 8.0
        decimalPoint.layer.cornerRadius = decimalPoint.bounds.size.width / 8.0
        acClear.layer.cornerRadius = acClear.bounds.size.width / 8.0
        addition.layer.cornerRadius = addition.bounds.size.width / 8.0
        divide.layer.cornerRadius = divide.bounds.size.width / 8.0
        multiply.layer.cornerRadius = multiply.bounds.size.width / 8.0
        subtraction.layer.cornerRadius = subtraction.bounds.size.width / 8.0
        squareRoot.layer.cornerRadius = squareRoot.bounds.size.width / 8.0
    }

    override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
        super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)

        if (UIDevice.currentDevice().orientation.isLandscape) {
            print("Device in Lanscape")
            let newButton1 = UIButton(type: UIButtonType.System) as UIButton
            newButton1.frame = CGRectMake(100, 100, 100, 50)
            newButton1.backgroundColor = UIColor.whiteColor()
            newButton1.center = CGPoint(x: number1.frame.width, y: number1.frame.height)
            newButton1.layer.cornerRadius = newButton1.bounds.size.width / 8.0
            self.view.addSubview(newButton1)
        }
        else{}
    }

    @IBAction func numberPressed(sender: AnyObject) {
        // set the variable "number" to whichever number the user presses
        let number = sender.currentTitle!

        if typing {
            outputDisplay.text = outputDisplay.text! + String(number!)
        } else {
            outputDisplay.text = number!
        }
        typing = true
    }

    @IBAction func calculationPressed(sender: AnyObject) {
        typing = false
        firstNumber = Float(outputDisplay.text!)!
        operation = sender.currentTitle!!
    }

    @IBAction func equalPressed(sender: AnyObject) {
        secondNumber = Float(outputDisplay.text!)!
        typing = false

        //arithmetic operations
        if operation == "+" {
            result = firstNumber + secondNumber
        }
        else if operation == "-" {
            result = firstNumber - secondNumber
        }
        else if operation == "✕" {
            result = firstNumber * secondNumber
        }
        else if operation == "÷" {
            result = firstNumber / secondNumber
        }
//        else if operation == "%" {
//            result = (firstNumber * secondNumber) / 100
//        }
        else if operation == "√" {
            result = sqrt(firstNumber)
        }

        outputDisplay.text = "\(result)"
    }

    @IBAction func squareRoot(sender: AnyObject) {
        result = sqrt(Float(outputDisplay.text!)!)
        outputDisplay.text = "\(result)"

    }

    @IBAction func deletePressed(sender: AnyObject) {
        if outputDisplay.text!.characters.count != 0 {
            outputDisplay.text = outputDisplay.text!.substringToIndex(outputDisplay.text!.endIndex.predecessor())
        }
        else{
            outputDisplay.text = "0"
        }

    }

    @IBAction func plusMinus(sender: AnyObject) {
        if( outputDisplay.text![outputDisplay.text!.startIndex] == "-"){
            outputDisplay.text!.removeAtIndex(outputDisplay.text!.startIndex)
        }else{
            outputDisplay.text!.insert("-", atIndex: outputDisplay.text!.startIndex)
        }
    }


    @IBAction func decimal(sender: AnyObject) {
        let decimal = sender.currentTitle!
        outputDisplay.text = outputDisplay.text! + decimal!
    }

    @IBAction func clear(sender: AnyObject) {
        result = 0
        firstNumber = 0
        secondNumber = 0
        outputDisplay.text = "0"
    }


    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

最佳答案

我会使用 Size Classes 来做到这一点.您可以使用不同的大小类在 Storyboard中设计不同的布局和按钮排列。如果此应用程序在 iPhone 上,您将在纵向模式下使用紧凑宽度和常规高度,在横向模式下使用紧凑高度和常规宽度。

关于ios - Swift - 在横向时创建 UIButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35356916/

相关文章:

ios - 错误:“预期返回Int的函数中缺少返回”

ios - Swift Json - 从 API 获取数据

ios - CAGradientLayer 在像素处获取颜色

ios - 访问 Cocoa 框架 Storyboard

swift - 尝试修复典型的 find nil while unwrapping 错误

ios - UIButton的UIControlState "application"有什么用?

ios - 突出显示时如何从 UIButton 中删除 CAGradientLayer

ios - 使用 ReactiveCocoa 获取 "use of undeclared type ' NoError'"

ios - 丢弃从某个点开始的所有核心数据更改

struct - 是适合常量的结构