【问题标题】:Why isn't my ScrollView/CATiledView zooming properly?为什么我的 ScrollView/CATiledView 不能正确缩放?
【发布时间】:2010-06-07 19:56:19
【问题描述】:

我有一个由 CATiledLayer 支持的 UIScrollView。该层正在从服务器中提取切片并显示它们以响应调用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 x 32 像素,则 URL 的格式正确为 32 像素,但是什么显示在屏幕上,放大到默认的 tileSize(在本例中为 128 x 128 像素)。有什么方法可以让图层正确绘制这些图像。

【问题讨论】:

    标签: iphone objective-c cocoa uiscrollview catiledlayer


    【解决方案1】:

    找到了。使用CGContextGetCTM(CGContextRef) 获取CGAffineTransform,并使用a(或b)属性的值作为缩放。在适当缩放的屏幕分辨率中获取图像(将高度和宽度乘以缩放)。然后将该图像绘制到剪辑框中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-22
      • 1970-01-01
      • 2019-01-04
      相关资源
      最近更新 更多