2016-07-07 4 views
0

CGContext을 사용하여 깔때기 모양을 만들고 있는데, 먼저 삼각형을 그리고 그 다음에 선을 그립니다. 내 UIView 하위 클래스의 drawRect에서 구현하고 있지만, 선이 약간 흐려 있기 때문에이 방법을 그리는 다른 방법이 있는지 궁금합니다. enter image description hereCGContext에 대한 더 나은 대안이 있습니까?

내가 디자인 이미지를 가져올 때 이미지가 선명 (당신이 아이폰에 알 수 있습니다)입니다 :

override func drawRect(rect: CGRect) { 

     let context: CGContextRef = UIGraphicsGetCurrentContext()! 
     CGContextClearRect(context, rect); 

     let rectWidth: CGFloat = 15 

     // Line 
     CGContextSetRGBStrokeColor(context, 0, 0, 0, 1) 
     CGContextMoveToPoint(context, rectWidth/2, 5) 
     CGContextAddLineToPoint(context, rectWidth/2, 10) 
     CGContextSetStrokeColorWithColor(context, UIColor.blueColor().CGColor) 
     CGContextSetLineCap(context, CGLineCap.Round) 
     CGContextSetLineWidth(context, 3.0) 
     CGContextStrokePath(context) 

     // Triangle 
     CGContextBeginPath(context); 
     CGContextMoveToPoint (context, CGRectGetMinX(rect), CGRectGetMinY(rect)); 
     CGContextAddLineToPoint(context, CGRectGetMidX(rect), 8); 
     CGContextAddLineToPoint(context, CGRectGetMaxX(rect), CGRectGetMinY(rect)); 
     CGContextClosePath(context); 

     UIColor.blueColor().setFill() 
     CGContextFillPath(context); 

    } 

이 생산 그래서 enter image description here

을,이다 거기 이 출력을 얻는 더 좋은 방법은? CGContext 라인은 약간 흐릿하므로 더 나은 대안이 있는지, 그리고 그러한 방법에 대한 찬반 양론이 무엇인지 알고 싶습니다.

+0

두 이미지가 모두 흐릿하게 보입니다. – Tricertops

답변

2

코어 그래픽은 아마도 당신이 말했기 때문에 물건이 흐릿해질 수 있습니다. CG 좌표계에서 정수 좌표의 각 쌍의 위치는 정확히 그리드 선에 있습니다. 이러한 좌표 사이에 1 포인트 폭 스트로크를 그리면 양쪽에서 0.5 포인트만큼 그리드 선을 넘는 스트로크를 얻게됩니다. 드로잉 할 비트 맵 컨텍스트의 크기에 따라 한 줄의 완전히 음영 처리 된 픽셀이 아닌 두 개의 반 음영 픽셀, 즉 흐린 라인이 생길 수 있습니다.

경우에 따라 전체 픽셀 경계선과 하프 픽셀 경계선 사이에 선을 그리는 지점 중 일부는 1x 디스플레이에서 일부 선이 흐리게 보이고 2x 또는 3x가 다른 선으로 표시됩니다 될거야. 그리기에 관한 Apple의 문서에서 Points versus Pixels에 대해 읽으십시오. 그러면 좌표를 상쇄하여 원하는 곳에 선이 떨어지게 할 수 있습니다.

관련 문제