我将此代码放入- (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);
}
}
测试&gt; = 10.0会关注屏幕分辨率,还是可能会引入一些[UIScreen mainScreen].scale
参数?
答案 0 :(得分:3)
我认为测试&gt; = 10.0没有考虑屏幕分辨率。 Apple使用“点”而不是像素来完成大部分绘图算法 - 与正常显示相比,这种方式不需要为视网膜显示更改代码。
如果你想画一个只有10.0像素宽的东西,你需要考虑屏幕分辨率;但是,如果你这样做,你将不得不编写支持视网膜显示和正常显示的方法。
答案 1 :(得分:2)
这取决于图形上下文的配置方式。如果这是在UIView
绘图代码中,则视图的比例因子(自动设置)将处理此问题,如果您要绘制位图上下文,则必须手动执行。