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

Posted

技术标签:

【中文标题】UIImageView 在 UIView 层上,错误的帧输出【英文标题】:UIImageView's on a UIView Layer, wrong frame output 【发布时间】:2011-08-30 06:55:55 【问题描述】:

我正在尝试合并 2 个UIImageViews 并将它们另存为 1。最上面的图像是静态“框架”,下面的图像是可旋转/可缩放的。

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

资产库

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

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,两张图片是320 x 480

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

【问题讨论】:

【参考方案1】:

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

// 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

【讨论】:

以上是关于UIImageView 在 UIView 层上,错误的帧输出的主要内容,如果未能解决你的问题,请参考以下文章

在一层上绘制多个 UIView

如何在 UIView 中为 UIImageView 添加 tapGesture

在 UIView 中居中 UIImageView

UIImageView 填写 UIView

为啥移动 UIView 不会在同一个视图上移动 UIImageView?

如何在 UIView 中有一个 UIImageView 并应用 NSLayoutConstraint?