【问题标题】:Swift - Using value from UISlider IBAction in another functionSwift - 在另一个函数中使用来自 UISlider IBAction 的值
【发布时间】: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 值之前调用。
  • 感谢您的意见!确实缺乏基本概念。但仍在学习。所以我最终会得到它:-) - 你将如何修复我的代码以实现我正在寻找的结果?

标签: swift uislider identifier xcode6.4


【解决方案1】:
  1. 在类的开头(在任何方法之外)声明一个实例变量,默认值为UISlider

    var rounded : Double = <defaultValueOfTheSlider>
    
  2. 删除sliderValueChanged()rounded之前的关键字var

【讨论】:

  • 感谢您的帮助!我们越来越近了,但舍入仍然对 viewdidload 内部的 filter.setValue(rounded, forKey: kCIInputIntensityKey) 没有影响。
  • 正如 Shoaib 提到的那样,viewDidLoad() 很早就被调用了——无论如何都在sliderValueChanged() 之前,所以你也必须在sliderValueChanged() 方法中更改过滤器设置
  • 理论上,我现在知道为什么它没有按预期工作(感谢所有帮助我的人!)我在 viewDidLoad 中创建了所有代码的函数,我正在调用它在滑块值更改中。它可以工作,但是效率极低,因为每次滑块移动时它都会设置 fileURL / beginImage / newImage 。我只是不知道如何调整代码,所以它只会影响过滤器设置。任何代码 sn-ps 将不胜感激!
【解决方案2】:

一些可以帮助您的概念。 您遇到的问题是您正在函数内创建一个实例,并且在函数返回时它会丢失。这样做的原因是函数数据是在堆栈上创建的,stack 是您的应用程序进程使用的临时内存。

要在整个类中访问变量,您可以在类的顶部声明它。然后将其分配给heap,以便以后访问,直到从堆中删除(解除分配)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-04
    • 1970-01-01
    • 1970-01-01
    • 2016-11-05
    • 2018-04-04
    • 1970-01-01
    • 2015-02-04
    相关资源
    最近更新 更多