我有一个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的两倍。但这似乎是一个黑客解决方案,我甚至不确定它是否会利用视网膜显示像素密度。
答案 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相同,因此图像现在将显示为扭曲。
希望这会对你有所帮助