2016-07-08 46 views
0

我想畫出如圖所示的兩個半圓(如下圖所示)如何繪製一個使用swift IO9的半圓,並基於一個數值繪製角度並填充顏色只有一部分

enter image description here 我 米數天努力,但沒有得到任何 嘗試了一些圖表API和一些代碼來繪製從計算器餅圖,但他們需要編輯,我不知道核心Grahpics,因爲我是新來的這 我工作在xcode 7.3.1和IOS 9 我的問題是: - 如何繪製一個半圓,取一個值並首先轉換該值以獲得其等效角度,然後dr AW這個角度的弧線和填充顏色在該部分 或提供我與我可以學習借鑑他們對我自己 感謝

回答

7

下面的代碼在Xcode的iOS遊樂場運行幫助一些鏈接。它創建一個自定義類UIView並繪製兩個餅圖片。起始角度和結束角度均以整圓的百分比表示。

您可以很容易地擴展它以顯示更多或更少的切片,具體取決於您擁有的數據。

drawRect方法創建一個從中心開始的貝塞爾路徑,然後添加一個弧段,最後關閉路徑以便填充它。

import UIKit 

class PieChart : UIView { 

    override func drawRect(rect: CGRect) { 

     drawSlice(rect, startPercent: 0, endPercent: 50, color: UIColor.greenColor()) 
     drawSlice(rect, startPercent: 50, endPercent: 75, color: UIColor.redColor()) 
    } 

    private func drawSlice(rect: CGRect, startPercent: CGFloat, endPercent: CGFloat, color: UIColor) { 
     let center = CGPoint(x: rect.origin.x + rect.width/2, y: rect.origin.y + rect.height/2) 
     let radius = min(rect.width, rect.height)/2 
     let startAngle = startPercent/100 * CGFloat(M_PI) * 2 - CGFloat(M_PI) 
     let endAngle = endPercent/100 * CGFloat(M_PI) * 2 - CGFloat(M_PI) 
     let path = UIBezierPath() 
     path.moveToPoint(center) 
     path.addArcWithCenter(center, radius: radius, startAngle: startAngle, endAngle: endAngle, clockwise: true) 
     path.closePath() 
     color.setFill() 
     path.fill() 
    } 
} 

let pieChart = PieChart(frame: CGRect(x: 0.0, y: 0.0, width: 300.0, height: 300.0)) 
pieChart.backgroundColor = UIColor.clearColor() 
0

我的問題已解決。

我們只需要做的第一線變化不大,以使它像在圖片的半圓:

drawSlice(rect, startPercent: 0, endPercent: 50, color: UIColor.greenColor()) 
drawSlice(rect, startPercent: 0, endPercent: 25, color: UIColor.redColor()) 
0

科多的代碼在斯威夫特3:

import UIKit 

class PieChart : UIView { 

    override func draw(_ rect: CGRect) { 

     drawSlice(rect, startPercent: 0, endPercent: 50, color: .green) 
     drawSlice(rect, startPercent: 50, endPercent: 75, color: .red) 
    } 

    private func drawSlice(_ rect: CGRect, startPercent: CGFloat, endPercent: CGFloat, color: UIColor) { 
     let center = CGPoint(x: rect.origin.x + rect.width/2, y: rect.origin.y + rect.height/2) 
     let radius = min(rect.width, rect.height)/2 
     let startAngle = startPercent/100 * CGFloat.pi * 2 - CGFloat.pi 
     let endAngle = endPercent/100 * CGFloat.pi * 2 - CGFloat.pi 
     let path = UIBezierPath() 
     path.move(to: center) 
     path.addArc(withCenter: center, radius: radius, startAngle: startAngle, endAngle: endAngle, clockwise: true) 
     path.close() 
     color.setFill() 
     path.fill() 
    } 
} 

let pieChart = PieChart(frame: CGRect(x: 0.0, y: 0.0, width: 300.0, height: 300.0)) 
pieChart.backgroundColor = UIColor.clear