iPhone - расстояние CGPoint в пикселях и разрешение экрана - PullRequest
1 голос
/ 21 июля 2011

У меня есть этот код в методе - (void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context (в подкласс MKOverlayView) для предотвращения рисования сегментов длиной менее 10 пикселей при наложении карты:

            CGPoint origin = [self pointForMapPoint:poly.points[0]];
            CGPoint lastPoint = origin;

            CGContextMoveToPoint(context, origin.x, origin.y);

            for (int i=1; i<poly.pointCount; i++) {
                CGPoint point = [self pointForMapPoint:poly.points[i]];

                CGFloat xDist = (point.x - lastPoint.x);
                CGFloat yDist = (point.y - lastPoint.y);
                CGFloat distance = sqrt((xDist * xDist) + (yDist * yDist)) * zoomScale;

                if (distance >= 10.0) {
                    lastPoint = point;
                    CGContextAddLineToPoint(context, point.x, point.y);
                }
            }

будет тест> = 10,0позаботится о разрешении экрана, или я могу ввести какой-нибудь параметр [UIScreen mainScreen].scale?

Ответы [ 2 ]

3 голосов
/ 21 июля 2011

Я считаю, что тест> = 10.0 не учитывает разрешение экрана. Apple делает большую часть своей арифметики рисования, используя «точки» вместо пикселей - таким образом, код не должен изменяться для дисплея сетчатки по сравнению с обычным дисплеем.

Если вы хотите нарисовать что-то шириной всего 10,0 пикселей, вам нужно будет учитывать разрешение экрана; однако, если вы сделаете это, вам придется написать метод, который будет поддерживать как отображение на сетчатке, так и нормальное отображение.

2 голосов
/ 21 июля 2011

Это зависит от того, как настроен графический контекст.Если это в UIView коде рисования, масштабный коэффициент вида (который устанавливается автоматически) позаботится об этом, если вы рисуете в растровом контексте, вы должны сделать это вручную.

...