我是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()。
答案 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()
?)