在swift中创建饼图
发布时间:2020-12-14 04:45:52 所属栏目:百科 来源:网络整理
导读:我正在尝试在 swift中创建一个饼图,并希望从头开始创建代码,而不是使用第三方扩展. 我喜欢它是@IBDesignable的想法,所以我从这开始: import Foundationimport UIKit@IBDesignable class PieChart: UIView { var data: DictionaryString,Int? required init(
我正在尝试在
swift中创建一个饼图,并希望从头开始创建代码,而不是使用第三方扩展.
我喜欢它是@IBDesignable的想法,所以我从这开始: import Foundation import UIKit @IBDesignable class PieChart: UIView { var data: Dictionary<String,Int>? required init(coder aDecoder: NSCoder) { super.init(coder:aDecoder)! self.contentMode = .Redraw } override init(frame: CGRect) { super.init(frame: frame) self.backgroundColor = UIColor.clearColor() self.contentMode = .Redraw } override fun drawRect(rect: CGRect) { // draw the chart in here } } 我不确定的是,如何最好地将数据输入图表.我应该有这样的事情: @IBOutlet weak var pieChart: PieChart! override func viewDidLoad() { pieChart.data = pieData pieChart.setNeedsDisplay() } 或者,还有更好的方法?据推测,没有办法在init函数中包含数据? 提前致谢! 解决方法
您可以创建一个包含数据的便利初始化,但这只有在您从代码创建视图时才有用.如果您的视图已添加到故事板中,您将需要一种在创建视图后设置数据的方法.
查看设计线索的标准UI元素(如UIButton)是很好的.您可以更改UIButton上的属性并更新它,而无需调用myButton.setNeedsDisplay(),因此您应该设计饼图以相同的方式工作. 拥有包含数据的视图属性是很好的.视图应该负责重绘自身,因此为数据属性定义didSet并在那里调用setNeedsDisplay(). var data: Dictionary<String,Int>? { didSet { // Data changed. Redraw the view. self.setNeedsDisplay() } } 然后你可以简单地设置数据,饼图将重绘: pieChart.data = pieData 您可以将其扩展到饼图上的其他属性.例如,您可能想要更改背景颜色.您还要为该属性定义didSet并调用setNeedsDisplay. 请注意,setNeedsDisplay只是设置一个标志,稍后将绘制视图.多次调用setNeedsDisplay不会导致您的视图重绘多次,因此您可以执行以下操作: pieChart.data = pieData pieChart.backgroundColor = .redColor() pieChart.draw3D = true // draw the pie chart in 3D 并且pieChart只会重绘一次. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |