1

我将此代码放入- (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);
                }
            }

test >= 10.0 是否会考虑屏幕分辨率,或者我可以引入一些[UIScreen mainScreen].scale参数吗?

4

2 回答 2

3

我相信 test >= 10.0 没有考虑屏幕分辨率。Apple 使用“点”而不是像素来完成大部分绘图算法 - 这样与普通显示器相比,视网膜显示器的代码不必更改。

如果您只想绘制 10.0 像素宽的东西,则需要考虑屏幕分辨率;但是,如果您这样做,则必须编写支持视网膜显示和正常显示的方法。

于 2011-07-21T01:46:29.843 回答
2

这取决于图形上下文的配置方式。如果这是在UIView绘图代码中,视图的比例因子(自动设置)将处理这个问题,如果您正在绘制位图上下文,则必须手动进行。

于 2011-07-21T02:05:48.087 回答