2015-08-08 35 views
0

这是一个令我困扰的超级基本问题。Swift - 在另一个函数中使用来自UISlider IBAction的值

我有一个UIslider IBAction生成一个Double(var = rounded)。我想在viewDidLoad中使用这个double。但得到的错误 “使用未解决的标识符的 '四舍五入'

@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(四舍五入,forKey:kCIInputIntensityKey)是我在哪里得到的错误。我想在这里使用slider函数中的'rounded'变量。

任何帮助在一个函数中使用一个变量在另一个函数将非常赞赏。我偶然遇到过这样的情况,但没有成功。所以一旦你们都在这里帮助我,它也应该解决我的其他问题。

由于

+1

我认为你缺乏基本概念:i)圆角变量不是类变量,因此只能在定义它的函数中访问。 ii)即使它是一个类变量,在viewDidLoad中也不会使用该变量,因为在设置了round的值之前调用了该函数。 – Shoaib

+0

感谢您的输入!实际上缺乏基本概念。但仍然在学习。所以我会最终得到它:-) - 你将如何修复我的代码,以实现我期待的结果? – Joe

回答

0
  1. 在类的开始声明一个实例变量 - 的任何方法外 - 用的UISlider

    var rounded : Double = <defaultValueOfTheSlider> 
    
  2. 默认值rounded之前删除关键字varsliderValueChanged()

+0

感谢您的帮助!我们越来越接近,但圆角仍然对viewdidload内的filter.setValue(四舍五入,forKey:kCIInputIntensityKey)没有影响。 – Joe

+0

作为Shoaib提到'viewDidLoad()'被称为非常早 - 无论如何'sliderValueChanged()'之前,所以你必须改变'sliderValueChanged()'方法中的过滤器设置 – vadian

+0

理论上,我现在知道它为什么没有按照我的意图工作(感谢你们所有人帮助我!)我创建了viewDidLoad中所有代码的函数,并且我在sliderValueChanged中调用它。它可以工作,但是效率非常低,因为每次滑块移动时都会设置fileURL/beginImage/newImage。我只是不知道如何调整代码,所以它只会影响过滤器设置。任何代码片段将不胜感激! – Joe

0

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

要访问整个类中的变量,您可以在类的顶部声明它。然后这将被分配给heap,以便它可用于以后访问,直到从堆中移除(释放)。

相关问题