2017-09-25 56 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

这是斯威夫特约定名称以大写字母开头的所有类 –

相关问题