iPhone编程:如何在实际大小的UIImageView节目中制作UIImage?

时间:2013-05-28 02:31:30

标签: ios iphone uiimageview uiimage cgrectmake

我有一个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的两倍。但这似乎是一个黑客解决方案,我甚至不确定它是否会利用视网膜显示像素密度。

5 个答案:

答案 0 :(得分:9)

如果你的UIImage的大小大于你的UIImageView的大小,那么使用:

if image.size > imageView.size 

[self.imageView setContentMode:UIViewContentModeScaleAspectFit];

这将使图像保持成比例,同时它将适合图像视图,

但是,如果你的UIImage的大小小于你的UIImageView的大小,那么使用:

 if image.size < imageView.size 

 self.imageView.contentMode = UIViewContentModeCenter;

它会将您的图像保持在中心,按比例和完整尺寸。

答案 1 :(得分:2)

尝试将UIImageView的{​​{3}}属性更改为contentMode

self.imageView.contentMode = UIViewContentModeCenter;

这应该导致图像根本不缩放,并在UIImageView中显示居中。

答案 2 :(得分:1)

抱歉,我忘记了这个问题!答案在其他方面很有帮助,我尝试了所有这些,但我发现的解决方案是,您需要通过附加&#34; @ 2x&#34来标记您想要显示的任何图像而不在视网膜显示屏上缩放;在文件名中的扩展名之前。例如,&#34; foo.png&#34;和&#34; foo@2x.png"。将内容模式更改为仅UIViewContentModeCenter这样的内容将无法正常工作。

您需要这样做的原因是因为iOS会将UIImageView中的非视网膜图像放大到该区域的4倍,使它们在视网膜和非视网膜设备上看起来相同。如果您希望它利用所有像素而不是将其放大,则必须在文件名中用&#34; @ 2x&#34;表示,并且它仅将该图像用于视网膜设备。

答案 3 :(得分:0)

[self.imageView setContentMode:UIViewContentModeScaleAspectFit];

这不会导致图像缩放。

答案 4 :(得分: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大小设置为与Image相同,因此图像现在将显示为扭曲。

希望这会对你有所帮助