2017-09-25 6 views
0

2つの* .swiftファイルがあります。 1つは、スライダ付きのViewControllerです。 2つ目は、線を描く「引き出し」クラスです。prepareForSegueなしの2つの* .swiftファイル間でデータを渡す

目標は、スライダーの値から変数を取得し、次にそれを「引き出し」に渡して線を描画し、次に(3)スライダーに新しい値を渡してライン。

デリゲートを使用してデータを渡す必要がありますか、それとも複雑すぎるのでしょうか? 残念ながら私はprepareForSeagueのないDelegateメソッドを見つけることができませんでした。

コードは次のとおりです。

の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

大文字で始まるすべてのクラスに名前を付けるのがスウィフトコンベンションです –

関連する問題