Swift:我怎样才能让动画只发生一次而不是每次我编辑一些东西

时间:2016-01-12 22:47:43

标签: ios swift uikit

我是swift的初学者。我正在构建一个单一的视图提示计算器应用程序,我只想在第一次加载应用程序时发生一些动画。每当我编辑某些内容时都不会发生。

这是我的代码: 当应用加载

时,我将容器隐藏在视图之外
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated) 

    billView.center.y -= (billView.frame.height)/2

}

让动画向下移动

override func viewDidLayoutSubviews() {
           super.viewDidLayoutSubviews()

    UIView.animateWithDuration(0.8, delay: 0.0,
        options: [.CurveEaseOut], animations: {
            self.billView.center.y = 210  }, completion: nil)
    print(billView.center.y)

}

这可以在应用加载时正常工作。不幸的是,这个动画在我与应用程序交互的任何时候都会一次又一次地发生。

这个动画就像调用此函数时一样(在文本字段中输入任何信息或移动滑块时)

让billAmount = NSString(string:billField.text!)。doubleValue

    var tipPercentages = [0.15, 0.18, 0.22]

    let tipPercentage = tipPercentages[segTipControl.selectedSegmentIndex]

    let percentLabel = round(tipPercentage * 100)

    selectedbillPercentageLabel.text = "+\(percentLabel)%"

    let tipAmount = billAmount * tipPercentage

    let totalAmount = billAmount + tipAmount

    let roundedTotalAmount = round(totalAmount * 100)/100

    totalLabel.text = "$\(roundedTotalAmount)"

    let splitSelected = Double(splitValueSlider.value)

    let intsplitSelected = Int(splitSelected)

    splitLabel.text = "\(intsplitSelected)"

    let splitDollarAmount = roundedTotalAmount/splitSelected

    let roundedSplitDollarAmount = round(splitDollarAmount * 100)/100

    splitAmount.text = "$\(roundedSplitDollarAmount)"

当在应用程序中输入任何数据时,有没有办法避免调用方法viewDidLayoutSubviews()。

animated gif

1 个答案:

答案 0 :(得分:1)

您可以添加一个简单的布尔值翻转,仅显示一次动画,而不是避免调用viewDidLayourSubviews。添加一个初始化为false的布尔属性;在此属性为false的情况下显示动画,并在显示动画后翻转布尔值。

var animationHasBeenShown = false // class property

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    if !animationHasBeenShown {
        UIView.animateWithDuration(0.8, delay: 0.0,
            options: [.CurveEaseOut], animations: {
                self.billView.center.y = 210  }, completion: nil)
        print(billView.center.y)

        animationHasBeenShown = true
    }
}

或者,考虑将动画放在另一个上下文中;它确实需要在viewDidLayoutSubviews()中(取决于您的应用的上下文,但可能更确切地说是viewDidAppear()?)