iPhone编程:如何使UIImageView中的UIImage以实际大小显示?

5

我有一个 UIImage,我想按像素在iPhone 4/4S/5屏幕上显示。重要的是,它不能被缩放,但是当我尝试使用setImage时,它会使图像太大。

我的 UIImageView 是在 UIStoryboard 中创建的(因为我对此还很陌生),并设置为“redraw”模式,其他所有内容默认。将UIImageViews的contentMode设置为其他模式都无法正确缩放UIImage(注:即不起作用)。

我找到了这个:

[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 解决方案,而且我甚至不确定它是否利用了视网膜显示屏的像素密度。

5个回答

9

如果您的UIImage的大小大于UIImageView的大小,请使用以下方法:

if image.size > imageView.size 

[self.imageView setContentMode:UIViewContentModeScaleAspectFit];

使用这个方法可以让你的图片在适应图片视图的同时保持比例:

但是,如果你的UIImage尺寸小于UIImageView的尺寸,则使用以下方法:

 if image.size < imageView.size 

 self.imageView.contentMode = UIViewContentModeCenter;

这将使你的图片保持居中、按比例和完整大小。


这是因为苹果太糟糕了。 - hasan

2
尝试将你的UIImageViewcontentMode属性更改为UIViewContentModeCenter
self.imageView.contentMode = UIViewContentModeCenter;

这应该会使图像不进行缩放,并在UIImageView中居中显示。

谢谢回复。我尝试了那个方法,但还是不行。我认为问题在于它在事后为视网膜显示器缩放了所有内容,因为我在视网膜 iPhone 4 和模拟的非视网膜 iPhone 上尝试过,图像始终占据屏幕宽度/高度的相同百分比。已添加到原问题中。 - sudo

1
抱歉,我不知何故忘记了这个问题!其他回答在其他方面很有帮助,我尝试了它们所有的方法,但我找到的解决方案是:如果您想要在视网膜显示屏上显示任何图像而不进行缩放,则需要通过在文件名中的扩展名之前添加“@2x”来标记它们。例如,“foo.png”和“foo@2x.png”。仅更改内容模式(如UIViewContentModeCenter)是行不通的。
您需要这样做的原因是,iOS将非视网膜图像在UIImageView中放大4倍以使它们在视网膜和非视网膜设备上看起来相同。如果您想利用所有像素并且不放大它,则必须在文件名中使用“@2x”指示,它只会在视网膜设备上使用该图像。

0

你正确地使用了代码

[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大小设置为与图像相同,因此图像现在将显示扭曲。

希望这能帮到您。


0
[self.imageView setContentMode:UIViewContentModeScaleAspectFit];

这不会导致图像缩放。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接