我有一个下面的代码,它是可可触摸类,它绘制了一个简单的饼图,并且使用值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 :(得分:0)
您可以设置委托模式,使用两种协议在UIView
和ViewController
之间传递数据。
protocol IsChart {
var delegate: ChartDelegate? { get set }
var ratio: CGFloat { get set }
}
protocol ChartDelegate: class {
var pcView: PCView! { get }
}
PCView
符合IsChart
,ViewController
符合ChartDelegate
。只需确保在PCView
初始化ViewController
时将delegate
属性设置为self
(ViewController
),然后添加已初始化的PCView
1}}作为pcView
的{{1}}属性。在ViewController
的{{1}}中,您需要将@IBAction
s UISlider
属性设置为pcView
,然后运行ratio
。
注意:
slider.value
。 如果您有任何疑问,请询问:D。