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);
                }
            }

テスト>=10.0は画面の解像度を考慮しますか、それともいくつかの[UIScreen mainScreen].scaleパラメーターを導入できますか?

4

2 に答える 2

3

test >= 10.0 は画面解像度を考慮していないと思います。Apple は、ピクセルの代わりに「ポイント」を使用してほとんどの描画計算を行います。そのため、通常のディスプレイと比較して Retina ディスプレイ用にコードを変更する必要はありません。

わずか 10.0 ピクセル幅のものを描画する場合は、画面の解像度を考慮する必要があります。ただし、これを行う場合は、Retina ディスプレイと通常のディスプレイの両方をサポートするメソッドを作成する必要があります。

于 2011-07-21T01:46:29.843 に答える
2

これは、グラフィックスコンテキストがどのように構成されているかによって異なります。これがUIView描画コードにある場合、ビューの倍率(自動的に設定されます)がこれを処理します。ビットマップコンテキストに描画する場合は、手動で行う必要があります。

于 2011-07-21T02:05:48.087 に答える