如何在类之间传递值 -

时间:2016-06-18 15:21:45

标签: ios swift

我有一个下面的代码,它是可可触摸类,它绘制了一个简单的饼图,并且使用值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()

    }

}

1 个答案:

答案 0 :(得分:0)

您可以设置委托模式,使用两种协议在UIViewViewController之间传递数据。

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

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

PCView符合IsChartViewController符合ChartDelegate。只需确保在PCView初始化ViewController时将delegate属性设置为selfViewController),然后添加已初始化的PCView 1}}作为pcView的{​​{1}}属性。在ViewController的{​​{1}}中,您需要将@IBAction s UISlider属性设置为pcView,然后运行ratio

注意:

  1. 比率属性将传递给slider.value
  2. 您可以在此处阅读有关实施委托模式和协议的更多信息:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Protocols.html
  3. 如果您有任何疑问,请询问:D。