2012-11-02 7 views
2

나는 아이폰으로 설정 에뮬레이터에서이 코드 (망막 4 인치) 나는 하나 개의 픽셀 수직 라인이 기대1 픽셀 너비 UIBezierPath를 그리는 방법은 무엇입니까?

-(void)drawRect:(CGRect)rect { 
    [[UIColor whiteColor]set]; 
    UIRectFill(self.bounds); 
    UIBezierPath *vertLine = [UIBezierPath bezierPath]; 
    [vertLine moveToPoint:CGPointMake(20.5, 10.0)]; 
    [vertLine addLineToPoint:CGPointMake(20.5, 20.0)]; 
    vertLine.lineWidth = 1.0; 
    [[UIColor blackColor]set]; 
    [vertLine stroke]; 
} 

를 실행하지만, 라인 두 개의 픽셀 폭과 검은 색 있어요. 검은 색으로 표시되면 픽셀 격자의 선 정렬에 문제가없는 것 같습니다 (이 경우 50 % 회색)

여기 무슨 일입니까?

+0

에서

페이지의 "픽셀 대 포인트"비 망막 에뮬레이터 (아이폰 OS 5.1)에 그것을 실행 해보십시오. 나는 이것이 레티 나 에뮬레이션이 어떻게 생겼는지를 가정합니다. – Miriam

+0

나는 에뮬레이터의 망막 디스플레이에 두 개의 픽셀 너비 선이 있고, 망막이 아닌 디스플레이에는 한 개의 픽셀 너비 선이 있습니다. 에뮬레이터 창의 크기는 에뮬레이트 된 장치의 크기와 일치합니다 (예 : iPhone의 경우 1136x640). iOS 6 및 iOS 시뮬레이터 버전 6.0 (358.4) – alecail

답변

3

UIKit의 경우 픽셀을 지정하지 않고 점을 지정합니다. 그런 다음 점은 자동으로 픽셀에 매핑됩니다. 1 포인트 너비 선은 두 개의 망막 픽셀에 매핑되는 것 같습니다. http://developer.apple.com/library/ios/#documentation/2DDrawing/Conceptual/DrawingPrintingiOS/GraphicsDrawingOverview/GraphicsDrawingOverview.html

+1

다음은 내 문제를 해결 한 문장입니다. * 고해상도 디스플레이 (배율 팩터 2.0)에서 1 포인트 너비의 선은 에일 리어 징 제거되지 않았습니다. 이는 두 개의 전체 픽셀 (-0.5에서 +0.5까지)을 차지하기 때문입니다. 하나의 물리적 픽셀 만 포함하는 선을 그리려면 두께를 0.5 포인트로하고 0.25 포인트만큼 위치를 오프셋해야합니다. * – alecail

+0

이 방법은 drawRect를 오버라이드하지 않도록 비 베지어 경로 뷰를 배치하는 데에도 유용합니다. 'UIView * lineView = [[UIView 0], [self.contentView.frame.size.height - (1.0 - 0.25), self.contentView.frame.size.width)]] lineView.backgroundColor = [UIColor colorWithRed : (230.0/255.0) f) 녹색 : (233/255.0f) 청색 : (237.0/255.0f) α : 1.0f]; [self.contentView addSubview : lineView];' – tooluser

관련 문제