iPhone-像素点距离和屏幕分辨率

iPhone-像素点距离和屏幕分辨率,iphone,core-graphics,screen,resolution,cgpoint,Iphone,Core Graphics,Screen,Resolution,Cgpoint,我在-(void)drawMapRect:(mkmapret)mapret zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context方法(在MKOverlayView子类中)中输入了此代码,以防止在地图覆盖上绘制长度小于10像素的线段: CGPoint origin = [self pointForMapPoint:poly.points[0]]; CGPoint lastPo

我在
-(void)drawMapRect:(mkmapret)mapret 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);
                }
            }
CGPoint origin=[self pointForMapPoint:poly.points[0]];
CGPoint lastPoint=原点;
CGContextMoveToPoint(上下文,origin.x,origin.y);
对于(int i=1;i=10.0){
最后一点=点;
CGContextAddLineToPoint(上下文,点.x,点.y);
}
}

测试>=10.0会考虑屏幕分辨率吗,或者我可以介绍一些
[UIScreen mainScreen].scale
参数吗?

我相信测试>=10.0不会考虑屏幕分辨率。苹果公司的大多数绘图算法都是使用“点”而不是像素——这样一来,与普通显示器相比,视网膜显示器的代码就不必改变


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

我认为test>=10.0没有考虑屏幕分辨率。苹果公司的大多数绘图算法都是使用“点”而不是像素——这样一来,与普通显示器相比,视网膜显示器的代码就不必改变


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

这取决于图形上下文的配置方式。如果这是在
UIView
drawing code中,视图的比例因子(自动设置)将解决这一问题,如果要在位图上下文中绘制,则必须手动执行。

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

它位于
-(void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context
方法中(MKOverlayView子类)。您认为我应该怎么做?测试将忽略屏幕分辨率,因此您需要询问您是否尝试不绘制10像素宽或10点宽的图形。我会选择点(因为它可以更好地在设备之间转换)然后你就不必更改当前的代码。我不想忽略它,我想要的是像素大小的线条,而不是点。我应该插入.scale属性吗?是的,那么我想你应该输入.scale属性。一定要测试它以确保它工作,但我认为它会工作。它在
-(void)drawMapRect:(mkmapret)中mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context
方法(MKOverlayView子类)。您认为我应该怎么做?测试将忽略屏幕分辨率,因此您需要询问是否尝试不绘制10像素宽或10点宽的图形。我将使用点(因为它可以更好地在设备之间转换)然后你就不必更改当前的代码。我不想忽略它,我想要的是像素大小的线条,而不是点。我应该插入.scale属性吗?是的,那么我想你应该输入.scale属性。一定要测试它以确保它工作,但我认为它会工作。它在
-(void)drawMapRect:(mkmapret)中mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context
方法(MKOverlayView子类)。我可以做一些类似>=10.0/self.view.scale的事情吗?文档中没有提到其他内容,因此我假设已在上下文中设置了比例因子。顺便说一句,此方法在后台线程上运行,因此您必须稍微小心。小心什么?比例与它是后台线程这一事实之间的关系是什么?它是在
-(void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context
方法(MKOverlayView子类)中的。我可以做一些类似>=10.0/self.view.scale的事情吗?文档中没有提到其他内容,因此我假设已在上下文中设置了比例因子。顺便说一句,此方法在后台线程上运行,因此您必须稍微小心。小心什么?比例与它是后台线程这一事实之间的关系是什么?