我一直在試驗兩種形狀。第一個是一個幀的類型和它的代碼如下:不同種類的UIBezierPath中填充方法的奇怪行爲
((X,Y)是我UIView
的原點和(W,H)是它的大小)
[bpath moveToPoint:CGPointMake(x, y)];
[bpath addLineToPoint:CGPointMake(x + w, y)];
[bpath addLineToPoint:CGPointMake(x + w, y + h)];
[bpath addLineToPoint:CGPointMake(x, y + h)];
[bpath closePath];
[bpath moveToPoint:CGPointMake(x + 100, y + 100)];
[bpath addLineToPoint:CGPointMake(x + 100, y + 50)];
[bpath addLineToPoint:CGPointMake(x + 50, y + 50)];
[bpath addLineToPoint:CGPointMake(x + 50, y + 100)];
[bpath closePath];
這使我下面的輸出:
而第二個是一個圓的內側的圓。它的代碼如下:
[bpath moveToPoint:CGPointMake(x + w, y + h * 0.5)];
[bpath addArcWithCenter:CGPointMake(x + w * 0.5, y + h * 0.5) radius:midx startAngle:0 endAngle:2 * M_PI clockwise:YES];
[bpath moveToPoint:CGPointMake(x + w * 0.75, y + h * 0.5)];
[bpath addArcWithCenter:CGPointMake(x + w * 0.5, y + h * 0.5) radius:0.25 * w startAngle:0 endAngle:2 * M_PI clockwise:YES];
而且爲了這個,我得到的東西象下面這樣:
我申請[bpath fill]
到兩個路徑。那麼爲什麼填充模式有所不同。 (我嘗試在第二種情況下添加closePath
,但沒有任何區別)。
另外,有沒有辦法讓第二個獲得類似的第一個形狀的填充圖案? (我知道它可以通過添加內圓的第二路徑來完成,但我想這樣做的一個路徑)
更新:我注意到,如果我第二個路徑上使用containsPoint
,它返回FALSE
當觸摸點在內圈內,僅當觸點位於兩個圓圈之間時才返回TRUE
。第一種形狀也表現出類似的行爲。
正如我在最後一行中提到的,我已經嘗試添加[bpath closePath]並且沒有改變。我試過使用EvenOddFillRule,但結果仍然相同。 – blancos 2014-09-19 11:43:26
@blancos:看我的編輯。這對我有用。 – DarkDust 2014-09-19 12:07:09
它的工作。感謝您的解決方案。但仍然想知道第一個形狀。我沒有爲該形狀設置使用EvenOddFillRule,但在這種情況下填充模式仍然正確。這種行爲的任何原因? – blancos 2014-09-19 12:26:18