Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift-在横向中创建UIButton_Ios_Swift_Uibutton_Constraints_Programmatically Created - Fatal编程技术网

Ios Swift-在横向中创建UIButton

Ios Swift-在横向中创建UIButton,ios,swift,uibutton,constraints,programmatically-created,Ios,Swift,Uibutton,Constraints,Programmatically Created,我正在用iOS 9、Swift和Xcode 7制作一个计算器应用程序,我想知道当用户只切换到横向模式时如何创建UIButtons。在数字和AC按钮的左侧添加更多运算符,并更改约束,将按钮切换到新按钮以腾出空间。iOS的基本计算器可以做到这一点,我想知道是怎么做到的 我是iOS开发新手,我一直在浏览网页,只找到一个名为:viewwillTransitionOnToSize()的覆盖函数。这是做这类事情的正确函数吗 此外,每次我进入横向视图时,都会创建另一个按钮。我怎样才能阻止这种事情发生?

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

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

此外,每次我进入横向视图时,都会创建另一个按钮。我怎样才能阻止这种事情发生?

附件是我通过编程创建的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.
    }


}

我会用它来做这件事。您可以使用不同的大小类在故事板中设计不同的布局和按钮排列。如果此应用程序在iPhone上,则在纵向时使用紧凑宽度和规则高度,在横向时使用紧凑高度和规则宽度。

与您的问题无关,但:为什么不使用开关盒而不是If-else-If语句?我认为switch更合适,因为if语句必须测试每个表达式。