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

标签 ios swift uikit

我是 swift 的初学者。我正在构建一个单 View 提示计算器应用程序,我只希望在应用程序首次加载时出现一些动画。而且并不是每次我编辑某些内容时都会发生。

这是我的代码: 当应用加载时,我将容器隐藏在 View 之外

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)

}

当应用程序加载时,这可以正常工作。不幸的是,每当我与该应用程序交互时,此动画都会一次又一次地发生。

就像这个动画在调用此函数时发生(即在文本字段上输入任何信息或移动 slider 时)

让 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

最佳答案

您可以添加一个简单的 bool 翻转来仅显示一次动画,而不是避免调用viewDidLayourSubviews。添加一个初始化为 false 的 bool 属性;当该属性为 false 时显示动画,并在动画显示后翻转 bool 值。

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() 中?)

关于ios - Swift:我怎样才能让动画只发生一次而不是每次我编辑东西时都发生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34755229/

相关文章:

ios - 计算跨多个 View Controller ios 花费的时间

ios - 在键盘上方向上移动文本字段

ios - 尝试使用以编程方式创建的图像为 UIImageView 设置动画时抛出错误

objective-c - 为什么我不应该子类化 UIButton?

ios - UIStackView : Is it really necessary to call both removeFromSuperView and removeArrangedSubview to remove a subview?

ios - NSObjectNotAvailableException - 无法连接到 SimulatorBridge

ios - SpriteKit - enumerateChildNode 导致崩溃 "array was mutated while being enumerated."

ios - 编码其模型中没有嵌套属性的嵌套对象

ios - 为什么在使用分段控件时 UITableView contentOffset 会发生变化?

iOS 在后台线程上访问 UIScreen