iPhone 编程:如何使 UIImageView 中的 UIImage 以实际大小显示?
Posted
技术标签:
【中文标题】iPhone 编程:如何使 UIImageView 中的 UIImage 以实际大小显示?【英文标题】:iPhone programming: How do I make a UIImage in a UIImageView show at actual size? 【发布时间】:2013-05-28 02:31:29 【问题描述】:我有一个UIImage
,我想在 iPhone 4/4S/5 屏幕上逐个像素地显示它。重要的是它根本没有缩放,但是当我尝试使用setImage
时,它会使图像太大。
我的UIImageView
是在UIStoryboard
中制作的(因为我对这方面真的很陌生),并设置为“重绘”模式,其他一切都默认。其他模式都没有正确缩放UIImage
(编辑:也就是说,将UIImageViews
contentMode 设置为其他内容不起作用)。
我环顾四周,发现了这个:
[self.imageView setImage: image];
self.imageView.frame = CGRectMake(self.imageView.frame.origin.x,
self.imageView.frame.origin.y,
image.size.width,
image.size.height);
这是行不通的。我尝试将每个维度减半,但仍然关闭。
更新:我认为它是在事后针对视网膜显示进行缩放的,因为在我使用的视网膜 iPhone 4 和非视网膜模拟器模式下,图像占用了相同百分比的屏幕。有什么方法可以将 UIImage 或 UIImageView 或项目设置为“视网膜就绪”?
更新 2:通过将每个维度减半来缩小图像似乎可行。 iPhone 4/4S 的像素是 2G/3G/3GS 的两倍。但这似乎是一个 hack 解决方案,我什至不确定它是否在利用视网膜显示像素密度时这样做。
【问题讨论】:
【参考方案1】:如果您的 UIImage 的大小大于您的 UIImageView 的大小,则使用:
if image.size > imageView.size
[self.imageView setContentMode:UIViewContentModeScaleAspectFit];
这将使您的图像保持比例,同时适合图像视图,
但是,如果 UIImage 的大小小于 UIImageView 的大小,则使用:
if image.size < imageView.size
self.imageView.contentMode = UIViewContentModeCenter;
它将使您的图像保持在中心,按比例和完整大小。
【讨论】:
那是因为苹果很烂【参考方案2】:尝试将UIImageView
的contentMode
属性更改为UIViewContentModeCenter
:
self.imageView.contentMode = UIViewContentModeCenter;
这应该会导致图像根本无法缩放,并在 UIImageView 中居中显示。
【讨论】:
感谢您的回复。我试过了,但它仍然不起作用。我认为问题在于它会在事后为视网膜显示缩放所有内容,因为我在视网膜 iPhone 4 和模拟的非视网膜 iPhone 上尝试过这个,并且图像始终占据屏幕宽度/高度的相同百分比.添加到原始问题。【参考方案3】:对不起,我忘记了这个问题!答案在其他方面很有帮助,我尝试了所有这些,但我发现的解决方案是您需要通过在文件中的扩展名前附加“@2x”来标记您想要显示的任何图像而不在视网膜显示器上缩放姓名。例如,“foo.png”和“foo@2x.png”。仅将内容模式更改为 UIViewContentModeCenter
是行不通的。
您需要这样做的原因是因为 ios 会将 UIImageView 中的非视网膜图像放大到 4 倍的区域,以使它们在视网膜和非视网膜设备上看起来相同。如果你想让它利用所有像素而不是放大它,你必须在文件名中用“@2x”表示,它只会将该图像用于视网膜设备。
【讨论】:
【参考方案4】:[self.imageView setContentMode:UIViewContentModeScaleAspectFit];
这不会导致图像缩放。
【讨论】:
【参考方案5】:您使用的代码正确
[self.imageView setImage: image];
self.imageView.frame = CGRectMake(self.imageView.frame.origin.x, self.imageView.frame.origin.y,
image.size.width, image.size.height);
但你需要将其内容模式设置为
[self.imageview setContentMode:UIViewContentModeScaleToFill];
现在这个 UIViewContentModeScaleToFill 将用图像填充 UIimage 视图。由于您已将 uiimageview 大小设置为与 Image 相同,因此图像现在将显示为失真。
希望对你有帮助
【讨论】:
以上是关于iPhone 编程:如何使 UIImageView 中的 UIImage 以实际大小显示?的主要内容,如果未能解决你的问题,请参考以下文章