Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 应用程序大小太大,因为图像太多_Ios_Screen Orientation_Image Scaling_Screen Size_Orientation Changes - Fatal编程技术网

Ios 应用程序大小太大,因为图像太多

Ios 应用程序大小太大,因为图像太多,ios,screen-orientation,image-scaling,screen-size,orientation-changes,Ios,Screen Orientation,Image Scaling,Screen Size,Orientation Changes,我正在创建一个通用应用程序。对于一个屏幕,我使用控件在网格中显示6个图像(png格式)。此屏幕还支持纵向和横向 我已经为所有iDevices创建了一组不同分辨率的图像,并使用正确的命名约定对它们命名,如下所示 name~iphone.png name@2x~iphone.png name~ipad.png name@2x~ipad.png 名字-568h@2x~iphone.png(iphone5) 我必须创建另一组这样的图像,因为我支持两种方向,我不能使用上面相同的图像,因为在景观中它会拉

我正在创建一个通用应用程序。对于一个屏幕,我使用控件在网格中显示6个图像(png格式)。此屏幕还支持纵向和横向

我已经为所有iDevices创建了一组不同分辨率的图像,并使用正确的命名约定对它们命名,如下所示

  • name~iphone.png
  • name@2x~iphone.png
  • name~ipad.png
  • name@2x~ipad.png
  • 名字-568h@2x~iphone.png(iphone5)
我必须创建另一组这样的图像,因为我支持两种方向,我不能使用上面相同的图像,因为在景观中它会拉伸

现在,我有近60个图像,仅用于一个屏幕,该应用程序已经重达~40MB!不用说,这是不可接受的

我的问题是,是否有必要为所有这些尺寸/设备和方向创建单独的图像?我不能只为视网膜显示创建一个集合吗?对于正常显示,它会缩小吗?如果不可能,有没有办法缩小图像的大小


谢谢。

不是很简单,但你应该这样做,或者至少与其他因素平衡。如果你不这样做,主要的问题是内存(RAM)问题,较大的图像占用大量内存空间,分辨率较低的设备比视网膜设备内存少。所以收缩不是最好的选择。
一个可能的解决方案是拍摄一个“大”图像,其他图像也可以调整大小。要做到这一点,您需要使用Core Graphics或ImageIO重新绘制图像,此库可能非常有用。当然要付出代价:

  • 它需要计算时间
  • 源“大图像”应该至少打开一次来进行计算,如果您已经缺少内存,这可能是一个问题
  • 对于GUI(不仅仅是)元素,还有另一种解决方案,使用PDF vect图像。您可以找到一篇有趣的文章

    如果您的图像没有使用alpha通道,请使用jpg

    无需为非视网膜和视网膜显示创建图像。您只能使用“视网膜图像”(如果可能,使用JPG格式)。当需要显示较小尺寸的图像时,可以使用“aspect fit”缩小较大的图像。可能会有一些质量权衡


    同样,对于iPhone 5图像,您可以使用clipsToBounds属性剪裁较长的图像,以在较小的屏幕中剪切不需要的部分。

    我也面临同样的问题…尝试减小PNG图像大小。@Amar谢谢。从现在起,我一直把缩小图像作为我的第二个选择。因为创建这么多图像是一项乏味的任务。因此,如果有办法减少这种情况,我会很好。如果没有,我将不得不采用压缩方法。:)@阿玛:我使用了你提到的网站。太棒了!有160MB到40MB!太多了!:)@伊苏鲁是的,我知道,这太神奇了。嘿,安德里亚,谢谢你的回答。为了测试它,我使用了我为视网膜显示器创建的一组图像,并在视网膜显示器和正常显示器上运行它。在普通屏幕上,它使用视网膜图像,我看不到任何问题或变化。很难检测iPhone模拟器中的差异吗?我必须在实际设备上测试吗?没有明显的变化,如果你为每种分辨率提供一种图像而不重新绘制,那么图像就是简单地拉伸的。由于模拟器的硬件与mac相同,所以您不会注意到内存问题。问题可能发生在真实设备上,在iphone 3g o 3gs上加载视网膜图像可以很快填满RAM,在某些情况下可能导致崩溃。谢谢你提供的所有信息。:)