gpt4 book ai didi

ios - 挣扎于引用变量(Swift)

转载 作者:搜寻专家 更新时间:2023-10-31 22:38:15 26 4
gpt4 key购买 nike

背景:我正在尝试使用 BAFluidView 制作波浪动画.我的目标很简单:点击按钮时启动动画,再次点击时停止。 pod(上面链接)提供了管理它的所有代码。

让大家知道,我是新手。请帮助我学习!


我的奋斗:

我需要为这个 wave 创建一个 View 。我将它放入一个名为“WaveContainer”的函数中。这是它的样子:

func WaveAnimation() {

let wave = BAFluidView(frame: self.view.frame, startElevation: 0.02)!

wave.maxAmplitude = 10
wave.minAmplitude = 8
wave.fillDuration = 50
wave.fill(to: 0.95)
wave.fillAutoReverse = false
wave.fillColor = UIColor.blue

waveView.addSubview(wave)

}

然后我在 ViewDidAppear 函数中调用了它。当然,它有效!我可以看到波浪,它正在波浪。好的。

当然,我不能在其他任何地方调用 wave 常量! 例如,如果我想在按下按钮时停止/启动波浪?

如果我尝试将 wave 常量从该函数移出到 ViewDidLoadViewDidAppear 中,我将无法访问 ...self.view.frame,波形不会显示在屏幕上。

我的问题:

  1. 我应该如何构建这段代码,以便我可以从几个不同的函数中引用 wave 常量?
  2. 当我不在 ViewDidLoad 或其他一些基于 View 的函数中时,我应该如何为 wave 常量引用 view

非常感谢您的帮助!


我的代码:

import UIKit
import BAFluidView

class ViewController: UIViewController {

// OUTLETS:

@IBOutlet weak var waveView: UIView!



// ACTIONS:

@IBAction func WaveButton(_ sender: UIButton) {
// If the user taps this button and the waveHasStarted variable is equal to false, flip it to true.
if waveHasStarted == false {
print("Start the wave with a press.")
startWave = true
waveHasStarted = true
waveHasBeenStopped = false
} else {
print("Stop the wave with a press.")
startWave = false
waveHasStarted = false
waveHasBeenStopped = true
}

}


// VARIABLES:

var waveHasStarted = false
var startWave = false
var waveHasBeenStopped = true



override func viewDidLoad() {
super.viewDidLoad()

}


override func viewDidAppear(_ animated: Bool) {}



// FUNCTIONS:

func WaveAnimation() {

let wave = BAFluidView(frame: self.view.frame, startElevation: 0.02)!

wave.maxAmplitude = 10
wave.minAmplitude = 8
wave.fillDuration = 50
wave.fill(to: 0.95)
wave.fillAutoReverse = false
wave.fillColor = UIColor.blue


// If the variable above has been flipped to "true," start the animation...
if startWave == true {
print("Start that wave animation")
wave.startAnimation()
} else {
// If not, stop it or do nothing.
print("Stop that wave animation")
wave.stopAnimation()
wave.keepStationary()
}

waveView.addSubview(wave)

}


}

最佳答案

使用lazy 初始化并获得class 级别的访问权限,

lazy var fluidView: BAFluidView = {
let wave = BAFluidView(frame: self.view.frame, startElevation: 0.02)!
wave.maxAmplitude = 10
wave.minAmplitude = 8
wave.fillDuration = 50
wave.fill(to: 0.95)
wave.fillAutoReverse = false
wave.fillColor = UIColor.blue
return wave
}()

现在您可以在任何地方添加开始停止动画,

waveView.addSubview(fluidView)
fluidView.startAnimation()
fluidView.stopAnimation()

关于ios - 挣扎于引用变量(Swift),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52847144/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com