中心和纵横比适合图像

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,那么它应该按定义居中。祝你好运!

【讨论】:

只是好奇,你有没有试过不设置任何内容模式,换句话说,保留默认的内容模式? 是的,我认为问题不在于它看起来的内容模式。我在之后添加了框架,现在我看到原始图像由于某种原因也存在居中问题。我编辑了帖子

以上是关于中心和纵横比适合图像的主要内容,如果未能解决你的问题,请参考以下文章

给定图像和纵横比的最大裁剪区域

可调整大小的图像以适合标签

如何调整 matplotlib 单选按钮的大小和纵横比?

根据宽度和纵横比计算新高度

MPMoviePlayerController 控件 - 删除全屏和纵横比按钮?

我们可以在 Flutter 中裁剪带有点和大小的图像吗?