2017-08-04 114 views
0

我有3個UIBezierPath,有2個圓圈,一行從1個圓圈的中心到另一個,它看起來像是底部的圖片。我想隱藏像頂部圖片一樣的圓圈內部分。有沒有簡單的方法來做到這一點?隱藏UIBezierPath的一部分

我的策略是從中心畫出一條看不見的線,然後從兩個圓的圓周畫一條黑線,因爲我知道斜坡等,但看起來工作太多了。 enter image description here

private func pathForBoxCircle1() -> UIBezierPath { 

     let circlePath = UIBezierPath(arcCenter:circle1BoxCurrentCenter, radius: 25, startAngle: 0.0, endAngle: CGFloat(2*M_PI), clockwise: false) 
     //circlePath.fill() 
     pathBoxCircle1Global = circlePath 

     return circlePath 
    } 

    private func pathForBoxCircle2() -> UIBezierPath { 

     let circlePath = UIBezierPath(arcCenter:circle2BoxCurrentCenter, radius: 25, startAngle: 0.0, endAngle: CGFloat(2*M_PI), clockwise: false) 
     //circlePath.fill() 
     pathBoxCircle2Global = circlePath 

     return circlePath 
    } 
    private func pathForHorizonLine() -> UIBezierPath { 
     let path = UIBezierPath() 
     path.move(to: circle1BoxCurrentCenter) 
     path.addLine(to: circle2BoxCurrentCenter) 
     path.lineWidth = 5.0 
     //pathHorizonLineGlobal = path 


     return path 
    } 

    override func draw(_ rect: CGRect) { 

     pathForBoxCircle1().stroke() 
     pathForBoxCircle2().stroke() // same as stroke() 
     pathForHorizonLine().stroke() 


    } 
+0

填充圓圈的顏色? – HMHero

+0

@HHHero我想圈出來看看 – bakalolo

+0

你可以顯示你的代碼來繪製路徑嗎?你能不能從圓圈的最右邊畫線到另一個圓圈的最左邊部分? – Ali

回答

1

不能混合在同一形狀透明和不透明線。你將不得不繪製2個圓,然後從第一個圓的外側到第二個圓的外側繪製線段。

要做到這一點,你需要trig或者pythagoras來計算連接線與你的2個圓相交的點的座標。

如果C1是你的第一個圓,C2是你的第二個圓,C1在(C1.x,C1.y),C2在(C2.x,C2.y),C1的半徑是R1,和C2的半徑爲R2,那麼僞代碼將是這個樣子:

angle1 = atan2(C1.y - C2y, C1.x - C2.x) 

angle2 = atan2(C2.y - C1.y, C2.x - C1.x) 

xOffset1 = R1 * cos(angle1) 
yOffset1 = R1 * sin(angle1) 

point1 = (C1.x + xOffset1, C1.y + yOffset1) 

xOffset2 = R2 * cos(angle2) 
yOffset2 = R2 * sin(angle2) 

point2 = (C2.x + xOffset2, C2.y + yOffset2) 

繪製自己的圈子,然後畫點1和點2之間的線路。

(請注意,我TRIG是有點生疏,而且我勾勒了這一點,在一張草稿紙。我認爲這是正確的,但它是完全未經測試)。