2016-06-18 8 views
0

私は単純な円グラフを描画するココアタッチクラスであり、CGFloatの値でPieの正確な量を表示するようにイメージを調整できる次のコードを持っています。クラス間で値を渡す方法 -

たとえば、メインビューのcontroler.swiftのスライダーから値を渡す方法はありますか?

public class PieChart : NSObject { 



    public class func drawCanvas1(ratio ratio: CGFloat = 0.75) { 

     //// Variable Declarations 
     let expression: CGFloat = 90 + ratio * 360 


     let ovalPath = UIBezierPath(ovalInRect: CGRect(x: 0, y: -0, width: 112, height: 112)) 
     UIColor.blackColor().setFill() 
     ovalPath.fill() 



     let oval2Rect = CGRect(x: 4, y: 4, width: 104, height: 104) 
     let oval2Path = UIBezierPath() 
     oval2Path.addArcWithCenter(CGPoint(x: oval2Rect.midX, y: oval2Rect.midY), radius: oval2Rect.width/2, startAngle: -expression * CGFloat(M_PI)/180, endAngle: -90 * CGFloat(M_PI)/180, clockwise: true) 
     oval2Path.addLineToPoint(CGPoint(x: oval2Rect.midX, y: oval2Rect.midY)) 
     oval2Path.closePath() 

     UIColor.redColor().setFill() 
     oval2Path.fill() 
    } 
} 

、これが私のViewController.swiftある

import UIKit 

class ViewController: UIViewController { 


    @IBOutlet weak var sliderValue: UISlider! 


    @IBAction func sliderMoved(sender: UISlider) { 

     let mySliderValue = sliderValue.value 

//私がこだわっているところです - >

 drawCanvas1 = Float(mySliderValue) 


} 

EDIT:円グラフは

を初期化され、そこからコードを追加しました
import UIKit 


@IBDesignable 


class PCView: UIView { 

    /* 
    // Only override drawRect: if you perform custom drawing. 
    // An empty implementation adversely affects performance during animation. 
    override func drawRect(rect: CGRect) { 
     // Drawing code 
    } 
    */ 
    override func drawRect(rect: CGRect) { 

     PieChart.drawCanvas1() 

    } 

} 
+0

'ViewController'に' PieChart'への参照が必要です。 'PieChart'はどこでどのように初期化されますか? – vadian

+0

ok - PieChatをこのように参照しますか? var sliderUpdate = PieChart! ? – PappaGee

+0

PieChartが初期化されている場所からコードを追加しました。 - – PappaGee

答えて

0

デリゲートpを設定することができます2つのプロトコルを使用してUIViewViewControllerの間でデータを渡します。

protocol IsChart { 
    var delegate: ChartDelegate? { get set } 
    var ratio: CGFloat { get set } 
} 

protocol ChartDelegate: class { 
    var pcView: PCView! { get } 
} 

PCViewIsChartに準拠してしまうとViewControllerChartDelegateに準拠します。ちょうどあなたがViewControllerあなたがselfViewController)にそのdelegateプロパティを設定し、あなたがViewControllerpcViewプロパティとして初期化さPCViewを追加でPCViewを初期化するときことを確認。 UISlider@IBActionでは、pcViewratioプロパティをslider.valueに設定し、次にpcView.setNeedsDisplay()を実行する必要があります。

注:

  1. 比プロパティはdrawCanvas1に渡されます。
  2. あなたはここでデリゲートパターンとプロトコルの実装の詳細を読むことができます:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Protocols.html

ご質問があれば質問してください:Dを。

+0

あなたは正しい@vadianです。私はそれに応じてそれを編集しました。しかし、値は今設定されなければならないことに注意してください。そうであれば、実行時にクラッシュします。 – Ike10

+0

オプションでない変数は、定義によってデフォルト値を持たなければなりません。それ以外の場合、コードはコンパイルされません。それは強いタイプのシステムの利点です。 – vadian

+0

暗黙のうちにラップされていないオプションを使用して値を設定し、viewDidLoadでpcviewを初期化できますか? @vadian – Ike10

関連する問題