Swift - 在另一个函数中使用来自 UISlider IBAction 的值
Posted
技术标签:
【中文标题】Swift - 在另一个函数中使用来自 UISlider IBAction 的值【英文标题】:Swift - Using value from UISlider IBAction in another function 【发布时间】:2015-08-08 18:41:11 【问题描述】:这是一个困扰我的超级基本问题。
我有一个 UIslider IBAction 正在生成一个 Double (var = rounded)。我想在 viewDidLoad 中使用这个 double。但收到错误“Use of unresolved identifier 'rounded'”
@IBAction func sliderValueChanged(sender: UISlider)
var currentValue = Double(sender.value)
var rounded = Double(round(100*currentValue)/100)
label.text = "\(rounded)"
override func viewDidLoad()
super.viewDidLoad()
let fileURL = NSBundle.mainBundle().URLForResource("puppy", withExtension: "jpg")
let beginImage = CIImage(contentsOfURL: fileURL)
let filter = CIFilter(name: "CISepiaTone")
filter.setValue(beginImage, forKey: kCIInputImageKey)
filter.setValue(rounded, forKey: kCIInputIntensityKey)
let newImage = UIImage(CIImage: filter.outputImage)
self.imageView.image = newImage
filter.setValue(rounded, forKey: kCIInputIntensityKey) 是我得到错误的地方。我想在这里使用滑块函数中的“舍入”变量。
非常感谢在另一个函数中使用一个函数中的一个变量的任何帮助。我遇到过几次都没有成功。因此,一旦你们都在这里帮助我,它也应该可以解决我的其他问题。
谢谢
【问题讨论】:
我认为您缺乏基本概念:i)舍入变量不是类变量,因此只能在定义它的函数中访问。 ii) 即使它是一个类变量,也不会在 viewDidLoad 访问该变量,因为该函数在设置 rounded 值之前调用。 感谢您的意见!确实缺乏基本概念。但仍在学习。所以我最终会得到它:-) - 你将如何修复我的代码以实现我正在寻找的结果? 【参考方案1】:在类的开头(在任何方法之外)声明一个实例变量,默认值为UISlider
var rounded : Double = <defaultValueOfTheSlider>
删除sliderValueChanged()
中rounded
之前的关键字var
【讨论】:
感谢您的帮助!我们越来越近了,但舍入仍然对 viewdidload 内部的 filter.setValue(rounded, forKey: kCIInputIntensityKey) 没有影响。 正如 Shoaib 提到的那样,viewDidLoad()
很早就被调用了——无论如何都在sliderValueChanged()
之前,所以你也必须在sliderValueChanged()
方法中更改过滤器设置
理论上,我现在知道为什么它没有按预期工作(感谢所有帮助我的人!)我在 viewDidLoad 中创建了所有代码的函数,我正在调用它在滑块值更改中。它可以工作,但是效率极低,因为每次滑块移动时它都会设置 fileURL / beginImage / newImage 。我只是不知道如何调整代码,所以它只会影响过滤器设置。任何代码 sn-ps 将不胜感激!【参考方案2】:
一些可以帮助您的概念。 您遇到的问题是您正在函数内创建一个实例,并且在函数返回时它会丢失。这样做的原因是函数数据是在堆栈上创建的,stack 是您的应用程序进程使用的临时内存。
要在整个类中访问变量,您可以在类的顶部声明它。然后将其分配给heap,以便以后访问,直到从堆中删除(解除分配)。
【讨论】:
以上是关于Swift - 在另一个函数中使用来自 UISlider IBAction 的值的主要内容,如果未能解决你的问题,请参考以下文章
我如何在另一个函数中使用retailId(来自flatMapLatest)