我想在二維空間中繪製兩個一般的三角形,使它們共享一個邊,使用Quartz2D。我使用此代碼爲繪圖:三角形與Quartz2D繪圖的完美對齊
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
Triangle *t1 = [triangles objectAtIndex:0];
Triangle *t2 = [triangles objectAtIndex:1];
[self fillTriangle:t1 inContext:context];
[self fillTriangle:t2 inContext:context];
}
- (void) fillTriangle:(Triangle *)t inContext:(CGContextRef)ctx
{
CGContextMoveToPoint(ctx, t.p1.p.x, t.p1.p.y);
CGContextAddLineToPoint(ctx, t.p2.p.x, t.p2.p.y);
CGContextAddLineToPoint(ctx, t.p3.p.x, t.p3.p.y);
CGContextAddLineToPoint(ctx, t.p1.p.x, t.p1.p.y);
CGContextSetFillColorWithColor(ctx, t.color.CGColor);
CGContextFillPath(ctx);
}
其中Triangle
是NSObject
子拿着三個點和顏色。
的問題是,即使他們分享兩點,有一個「空間」他們之間,當我用這個代碼填充它們,如顯示的圖像:
問題:任何人知道如何擺脫空間,以便從一個三角形到另一個三角形無縫過渡,沒有線條或其間的任何東西?我想繼續使用Quartz2D,但我很樂意提供任何幫助。謝謝!
編輯:有答案顯示該問題是由子像素抗鋸齒引起的,以及將所述線路
CGContextSetAllowsAntialiasing(ctx, NO);
到fillTriangle
方法解決了。但這不是我想看到的結果 - 我不喜歡它被混淆,如第二張圖片所示。
問題更新:你知道,如何解決這兩個問題,那就是,保持圖像乾淨,沒有醜陋的鋸齒,但是三角形之間沒有空間?
EDIT2:因此,正如答案中指出的那樣,我可以添加行筆劃代碼,刪除抗鋸齒標記,筆畫將填充空間。這裏是最後的形象示發生了什麼:
通知重疊框外的線條。我想知道原因可能是什麼,當我將的寬度設置爲0.5f(因爲視網膜,這意味着1px,這可能是響應者的想法),並且這真的解決了整個問題。感謝所有幫助!
與其他答案相同的信息,但你發佈了一個解決它的代碼!謝謝:)編輯:實際上,它解決了三角形之間的透明線的問題,但現在它看起來不好用不同的顏色。我會更新這個問題。 – Gyfis
用已編輯問題的可能解決方案更新了答案。 – robert
非常感謝您的更新答案!我也更新了這個問題 - 這在某種程度上有所幫助,但並不完美,不幸的是 – Gyfis