【问题标题】: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 被缩放并居中在图像视图中。但是,如果您将图像视图放置在某个奇怪的地方,那么它所包含的图像当然也会出现在那个奇怪的地方。
  • 我正在从照片库中提取图像。框架如我所料。我在情节提要中设置了视图。什么奇怪的地方?我没有奇怪的地方

标签: ios uiview uiimage


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

【讨论】:

  • 只是好奇,你有没有试过不设置任何内容模式,换句话说,保留默认的内容模式?
  • 是的,我认为问题不在于它看起来的内容模式。我在之后添加了框架,现在我看到原始图像由于某种原因也存在居中问题。我编辑了帖子
猜你喜欢
  • 2011-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 2019-05-27
  • 2018-10-25
  • 2019-04-02
  • 1970-01-01
相关资源
最近更新 更多