UIVmageView在UIView层上,错误的帧输出

时间:2011-08-30 06:55:56

标签: ios uiview uiimage calayer quartz-core

我正在尝试合并2 UIImageViews并将它们保存为1.最顶层的图像是静态“框架”,下部图像是可旋转/可缩放的。

我的问题是照片需要保存为640 x 960,但是,2张图片所在的实际视图是320 x 480(因此它在用户屏幕上正确显示)。当这两个图像组合在一起时,它们会保存在640 x 960视图中,但是,这两个图像本身会合并为320 x 480(如下图所示)。

以下是我目前用于获取错误结果的代码。

CGSize deviceSpec;
if ( IDIOM == IPAD ) { deviceSpec =CGSizeMake(768,1024); } else { deviceSpec =CGSizeMake(640,960); }
UIGraphicsBeginImageContext( deviceSpec );

    UIView * rendered = [[UIView alloc] init];
    [[rendered layer] setFrame:CGRectMake(0,0,deviceSpec.width,deviceSpec.height)];
    [[rendered layer] addSublayer:[self.view layer]];
    [[rendered layer] renderInContext:UIGraphicsGetCurrentContext()];

    UIImage * draft = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

AssetsLibrary

还应该提到我使用以下方法保存图像:

ALAssetsLibrary * library = [[[ALAssetsLibrary alloc] init] autorelease];
[library writeImageToSavedPhotosAlbum: draft.CGImage orientation:ALAssetOrientationUp 
                      completionBlock: ^(NSURL *assetURL, NSError *error)  
 {
     if (error) {
         NSLog(@"ALAssetLibrary error - %@", error);
     } else {
         NSLog(@"Image saved: %@", assetURL);
     }
 }];

输出

请注意,整个白色区域实际为640 x 960,而2张图片为320 x 480

enter image description here

注意:这里的实际图像是640x960(整个区域),其中实际图像(照片)是320x480,这是原始图层框架的实际尺寸。

1 个答案:

答案 0 :(得分:0)

为了支持不同的比例,我使用以下代码:

// If you specify a value of 0.0, the scale factor is set to the scale factor of the device’s main screen. 
UIGraphicsBeginImageContextWithOptions(compositeView.frame.size, compositeView.opaque, scale);
[compositeView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

因此,您需要将UIGraphicsBeginImageContext替换为UIGraphicsBeginImageContextWithOptions