2015-08-08 38 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,以便它可用於以後訪問,直到從堆中移除(釋放)。

相關問題