Почему мой ScrollView / CATiledView не правильно масштабирует? - PullRequest
0 голосов
/ 07 июня 2010

У меня есть UIScrollView, поддерживаемый CATiledLayer. Слой извлекает тайлы с сервера и отображает их в ответ на запрос, когда вызывается drawLayer:inContext. Вот как это выглядит:

-(void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx{
    ASIHTTPRequest *mapRequest;
    WMSServer *root = self.mapLayer.parentServer;
    while(root == nil){
        root = self.mapLayer.parentLayer.parentServer;
    }
    //Get where we're drawing
    CGRect clipBox = CGContextGetClipBoundingBox(ctx);
    double minX = CGRectGetMaxY(clipBox);
    double minY = CGRectGetMinX(clipBox);
    double maxX = CGRectGetMinY(clipBox);
    double maxY = CGRectGetMaxX(clipBox);

    //URL for the request made here using the min/max values from above
    NSURL *url = [[NSURL alloc] initWithString:path];
    mapRequest = [ASIHTTPRequest requestWithURL:url];
    [url release];
    [mapRequest startSynchronous];
    //Wait for it to come back...
    //Turn the Data into an image
    NSData *response = [mapRequest responseData];
    //Create the entire image
    CGDataProviderRef dataProvider = CGDataProviderCreateWithCFData((CFDataRef)response);
    CGImageRef image = CGImageCreateWithPNGDataProvider(dataProvider, NULL, true, kCGRenderingIntentDefault);
    CGDataProviderRelease(dataProvider);
    //Now paint the PNG on the context
    CGContextDrawImage(ctx, clipBox, image);
}

Проблема возникает, когда я увеличиваю. Размер плиток (как обозначено прямоугольником clipBox) уменьшается, и если, скажем, 32 на 32 пикселя, URL правильно сформирован для 32 пикселей, но что отображается на экране в масштабе до размера плитки по умолчанию (в данном случае 128 на 128 пикселей). Есть ли какой-нибудь способ, которым я могу заставить слой правильно рисовать эти изображения.

1 Ответ

0 голосов
/ 08 июня 2010

Нашел это.Получите CGAffineTransform с CGContextGetCTM(CGContextRef) и используйте значение свойства a (или b) в качестве увеличения.Получите изображение на экране с соответствующим масштабом (умножьте высоту и ширину на масштаб).Затем нарисуйте это изображение в поле клипа.

...