加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在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只会重绘一次.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读