【发布时间】:2016-06-17 10:45:00
【问题描述】:
我正在尝试使用核心图设计一个 3D 饼图。 这样我就有了以下代码
@IBOutlet weak var pieChartDataLabel: UILabel!
@IBOutlet weak var graphView: CPTGraphHostingView!
var pieItem:Int = 0
var pieChartValueArrayToShow = [AnyObject]()
override func viewDidLoad() {
super.viewDidLoad()
let graph = CPTXYGraph(frame: CGRectZero)
graph.title = "PieChart"
graph.paddingLeft = 0
graph.paddingTop = 0
graph.paddingRight = 0
graph.paddingBottom = 0
graph.backgroundColor = UIColor.brownColor().CGColor
let overlayGradient = CPTGradient()
overlayGradient.gradientType = CPTGradientType.Radial
overlayGradient.addColorStop(CPTColor.blackColor().colorWithAlphaComponent(0.0), atPosition: 0.9)
overlayGradient.addColorStop(CPTColor.blackColor().colorWithAlphaComponent(0.4), atPosition: 1.0)
let pie = CPTPieChart()
//pie.borderLineStyle = linestyle
pie.dataSource = self
pie.delegate = self
pie.pieRadius = (self.view.frame.size.width * 0.7)/2
pie.overlayFill = CPTFill(gradient: overlayGradient)
graph.addPlot(pie)
self.graphView.hostedGraph = graph;
// Do any additional setup after loading the view.
}
但是我得到一个白色的饼图。 这是我的输出图像。 https://drive.google.com/open?id=0B9YZfopxzOv5UG9hQmRjZGVQdzQ 我更新了我的数据源和委托方法。 是的,不过我得到这个输出 - https://drive.google.com/open?id=0B9YZfopxzOv5Uy14NXlQYkJZY1k
func numberOfRecordsForPlot(plot: CPTPlot) -> UInt {
return UInt(pieItem)
}
func numberForPlot(plot: CPTPlot, field fieldEnum: UInt, recordIndex idx: UInt) -> AnyObject? {
return pieChartValueArrayToShow[Int(idx)]
}
func pieChart(plot: CPTPieChart, sliceWasSelectedAtRecordIndex idx: UInt) {
print("dataLabel was selected At Record Index getting called")
self.pieChartDataLabel.text = "Your selected value is \(pieChartValueArrayToShow[Int(idx)])"
}
这是我的 Prepareforsegue 方法,我在其中分配 pieChartValueArrayToShow 和 pieItem
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if (segue.identifier == "ShowPieChart") {
let desinationviewController = segue.destinationViewController as! PieChartViewController
let count = pieChartValueArray.count as Int
print(count)
desinationviewController.pieItem = count//(sender?.integerValue)!//pieChartValueArray.count//
print("count is \(pieChartValueArray.count)")
desinationviewController.pieChartValueArrayToShow = pieChartValueArray
}
print("Prepare segue getting called\(sender)")
}
【问题讨论】:
-
我在 Core Plot 示例应用程序中尝试了这种叠加设置,看起来还不错。饼图是否正确显示而没有过度?实现了哪些数据源和委托方法,它们返回什么?馅饼里有几片?切片周围有边界线吗?如果有,用什么线型来画边界线?
-
嗨@EricSkroch 我更新了数据源和委托方法。你能通过提供一些代码示例来帮助我吗?谢谢
-
饼图是否正确显示而没有过度?
pieItem(切片数)的值是多少? -
是的,PieItem 是切片计数,并且饼图不会过度显示正确。这是图片(drive.google.com/open?id=0B9YZfopxzOv5Uy14NXlQYkJZY1k)
-
这是截图而不是PDF?部分透明的元素无法在 PDF 中正确呈现。