2017-09-25 55 views
0

我有兩個* .swift文件。一個是帶滑塊的ViewController。 第二個是「抽屜」類,它繪製了一條線。 (1)從滑塊值中獲取一個變量,然後(2)將其傳遞給'drawer'來繪製一條線,然後(3)通知滑塊它可以傳遞一個新值來重繪線。在兩個* .swift文件之間傳遞數據而無需prepareForSegue

我應該使用委託來傳遞數據還是它太複雜了? 不幸的是,我無法找到沒有prepareForSeague的委託方法。

代碼如下。

的ViewController:

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet weak var label: UILabel! 

    @IBAction func slider(_ sender: UISlider) { 
     label.text = String (sender.value) 
    } 

drawer.swift:

import UIKit 

// var position = 300 - Here I want to get a variable from the ViewController 

class drawer: UIView { 

    override func draw(_ rect: CGRect) { 
     let context = UIGraphicsGetCurrentContext() 
     context?.setLineWidth(2.0) 
     let colorSpace = CGColorSpaceCreateDeviceRGB() 
     let components: [CGFloat] = [0.0, 0.0, 1.0, 1.0] 
     let color = CGColor(colorSpace: colorSpace, components: components) 
     context?.setStrokeColor(color!) 
     context?.move(to: CGPoint(x: 30, y: 30)) 
     context?.addLine(to: CGPoint(x: position, y: 400)) 
     context?.strokePath() 
    } 
} 
+0

https://stackoverflow.com/a/41560949/2303865 –

+0

從哪裏抽屜傳遞值類。迅速? –

+0

一旦滑塊的值發生變化,就必須將其發送到抽屜以重新繪製線條。 – user3820453

回答

0

您可以在全球範圍內聲明變量。

var position = 0.0 
class drawer: UIView {} 

並將此處的值替換。

@IBAction func slider(_ sender: UISlider) { 
    label.text = String(sender.value) 
    position = sender.value 
} 

建議:命名約定:命名您的所有開始以一個大寫字母

+0

即使它工作,你也不應該在全局級別聲明任何變量。查看我在上面發佈的鏈接,看看如何在不污染應用程序的全局空間的情況下獲得相同結果 –

+0

您是對的,但我沒有在代碼中看到任何'drawer.swift'實例,我也試圖在評論中問他! –

+0

這是斯威夫特約定名稱以大寫字母開頭的所有類 –

相關問題