2016-06-18 4 views
0

다음 코드는 간단한 파이 차트를 그리는 코코아 터치 클래스이며 CGFloat 값을 사용하여 올바른 양의 파이를 표시하도록 이미지를 조정할 수 있습니다.클래스간에 값을 전달하는 방법 -

기본보기 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) 


} 

편집 : pieChart에이

를 초기화되는 곳에서 추가 된 코드
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

오케이 - 그래서 PieChat을 이처럼 참조하겠습니까? var sliderUpdate = PieChart! ? – PappaGee

+0

PieChart가 초기화되는 코드를 추가했습니다. - – PappaGee

답변

0

위임을 설정할 수 있습니다. p 두 프로토콜을 사용하여 UIViewViewController 사이의 데이터를 전달합니다.

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

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

PCViewIsChart을 준수 할과 ViewControllerChartDelegate을 준수합니다. 그냥 확인 당신은에서 PCView를 초기화 할 때 ViewController 당신이 self과의 delegate 재산합니다 (ViewController)를 설정하고 ViewControllerpcView 속성으로 초기화 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

암시 적으로 unwrapped 옵션을 사용하고 값을 설정하고 viewDidLoad에서 pcview를 초기화 할 수 있습니까? @vadian – Ike10

관련 문제