中心和纵横比适合图像
Posted
技术标签:
【中文标题】中心和纵横比适合图像【英文标题】:Center & Aspect Fit Image 【发布时间】:2014-04-14 17:08:28 【问题描述】:目前我似乎无法同时设置 2 种内容模式。但我希望图像既缩放又居中。我该如何做到这一点?
@property (weak, nonatomic) IBOutlet UIView *windowOut;
self.windowOut.layer.borderColor = [UIColor redColor].CGColor;
self.windowOut.layer.borderWidth = 3.0f;
UIImage *face = [UIImage imageNamed:@"face.png"];
UIImageView* imageView = [[UIImageView alloc] initWithFrame:self.windowOut.frame];
imageView.contentMode = UIViewContentModeScaleAspectFit;
imageView.contentMode = UIViewContentModeCenter;
[imageView setImage:face];
[self.windowOut addSubview:imageView];
这张图片是上面代码的结果:
这个图片是"imageView.contentMode = UIViewContentModeCenter; " 被注释掉:
编辑: 此图像是我注释掉两个 contentModes 时的结果:
【问题讨论】:
UIViewContentModeScaleAspectFit
不把图像居中吗?
不,由于某种奇怪的原因,它向右移动了大约 %10
您在何处/何时分配图像?您是否检查过 self.windowOut.frame
是否符合您的预期?
UIViewContentModeScaleAspectFit
被缩放并居中在图像视图中。但是,如果您将图像视图放置在某个奇怪的地方,那么它所包含的图像当然也会出现在那个奇怪的地方。
我正在从照片库中提取图像。框架如我所料。我在情节提要中设置了视图。什么奇怪的地方?我没有奇怪的地方
【参考方案1】:
不居中的原因在这里:
UIImageView* imageView = [[UIImageView alloc] initWithFrame:self.windowOut.frame];
[self.windowOut addSubview:imageView];
仅当 windowOut
恰好位于 (0/0) 时才有效。
.frame
在其父视图的坐标系中给出框架。如果windowOut
位于,比方说 (20/20) 在其父视图 (self.view?) 内,那么 imageView
将位于 (40,40)。
请改用bounds
。这是相同的,但在它自己的坐标系内。
UIImageView* imageView = [[UIImageView alloc] initWithFrame:self.windowOut.bounds];
[self.windowOut addSubview:imageView];
【讨论】:
您的第三张图片只是证明。UIViewContentModeScaleAspectFit
会做。
您的代码非常适合模拟器,但是当我在设备上测试它时,它看起来像第三张图像但居中。可能是什么问题?
当您观察到模拟器和设备之间的奇怪差异时,然后 a) 从模拟器中删除应用程序,b) 从设备中删除应用程序,c) 清理并重建。
问题似乎更奇怪了。下载或保存的图片显示正确。我的 iPhone 相机拍摄的照片无法正确缩放。
可能是大小。相机图片比网站上的图片大,可能已经下载。如果是大小,则使用不同的内容模式。【参考方案2】:
如果 imageView 设置为与其 superview 相同的帧,并且内容模式为UIViewContentModeScaleAspectFit
,那么它应该按定义居中。祝你好运!
【讨论】:
只是好奇,你有没有试过不设置任何内容模式,换句话说,保留默认的内容模式? 是的,我认为问题不在于它看起来的内容模式。我在之后添加了框架,现在我看到原始图像由于某种原因也存在居中问题。我编辑了帖子以上是关于中心和纵横比适合图像的主要内容,如果未能解决你的问题,请参考以下文章