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 中为 UIImageView 添加 tapGesture