2014-09-12 93 views
0

我正在嘗試使用UIBezierPath繪製長方體形狀。我的繪圖代碼如下:如何平滑貝塞爾路徑中的連線?

((X,Y)是我UIView及(h起源,W)是它的大小)

UIBezierPath *bpath1 = [UIBezierPath bezierPath]; 
[bpath1 moveToPoint:CGPointMake(x, y + h * 0.4)]; 
[bpath1 addLineToPoint:CGPointMake(x, y + h)]; 
[bpath1 addLineToPoint:CGPointMake(x + w - (w * 0.4), y + h)]; 
[bpath1 addLineToPoint:CGPointMake(x + w - (w * 0.4), y + h * 0.4)]; 
[bpath1 closePath]; 


UIBezierPath *bpath2 = [UIBezierPath bezierPath]; 
[bpath2 moveToPoint:CGPointMake(x + w * 0.4, y)]; 
[bpath2 addLineToPoint:CGPointMake(x + w, y)]; 
[bpath2 addLineToPoint:CGPointMake(x + w - (w * 0.4), y + h * 0.4]; 
[bpath2 addLineToPoint:CGPointMake(x, y + h * 0.4]; 
[bpath2 closePath]; 

UIBezierPath *bpath3 = [UIBezierPath bezierPath]; 
[bpath3 moveToPoint:CGPointMake(x + w, y)]; 
[bpath3 addLineToPoint:CGPointMake(x + w, y + h - (h * 0.4))]; 
[bpath3 addLineToPoint:CGPointMake(x + w - (w * 0.4), y + h)]; 
[bpath3 addLineToPoint:CGPointMake(x + w - (w * 0.4), y + h * 0.4]; 
[bpath3 closePath]; 

我在3路,因爲我想不同的α值,每路徑。我得到了想要的輸出,低於:

General output

但讓我驚喜的h(高度)很少價值觀,我得到了形狀如下:

Strange shape for some <code>h</code> values

現在,這種形狀出現的數量很少。由於渲染代碼每次都是相同的,所以我不理解貝塞爾路徑的這種奇怪行爲。爲什麼bezier路徑顯示這種行爲,並有什麼辦法來平滑這些關節?

回答

0

如果您對UIView的繪製,然後亞當的解決方案工作。但是,如果您正在使用CaShapeLayer(與我的情況相同),那麼您必須設置shapeLayerlineJoin屬性,而不是路徑。 該解決方案解釋爲here

2

查看lineCapStylelineJoinStyle。具體來說,我認爲這是因爲lineJoinStyle默認爲Mitre,並將其更改爲Round或更改miterLimit

我相信這有相同的解決方案UIBezierPath not drawing a smooth curve

+0

那麼如何計算miterLimit值呢?您提供的鏈接將該值設置爲-10,這不能解決問題。 – blancos 2014-09-15 05:56:21