ios4支持高分辨率的一些总结

iPhone4采用了一个叫作retina的屏幕,尺寸和老的iphone同样大,可是分辨率提升了4倍,看起高清的图来,爽太多了,根本看不到像素点.

对于老的app来讲,在iphone4中运行,会自动用4个像素替代原来的一个像素,这样就不用更改代码,使得老app能够天然的在iphone4中运行,可是UI的效果会有些蒙蒙的,不是最佳的效果,要达到最佳,必须为原来的图片资源,从新设计一份640*960的高清版本,这样才能在iphone4内达到最佳的UI效果~

下面就来简单总结下在ios4中怎么样使用高清图,首先要了解一些概念:

Points Versus Pixels:
When using native drawing technologies such as Quartz, UIKit, and Core Animation, you specify coordinate values using a logical coordinate space, which measures distances in points. This logical coordinate system is decoupled from the device coordinate space used by the system frameworks to manage the pixels on the screen.

通常程序中使用到的尺寸都是以point来计算的.

在老的iphone中,point和pixel基本没怎么去分辨,由于都是1:1的,都是320*480.

可是在iphone4或之后的设备中,这个再也不是1:1的关系,对于iphone4的retina屏幕来讲,1point=2pixels,屏幕的最大point的size还是320*480.

接下来就说下怎么样使用高清图:
假设如今有两附图Default.png(320*480)和Default@2x.png(640*960)

UIImage *p_w_picpath1 = [UIImage p_w_picpathNamed:@"Default.png"];
UIImage *p_w_picpath2 = [UIImage p_w_picpathNamed:@"Default"];

上面两行代码,在ios4中,都会自动根据你的手机分辨率,来自动匹配图片:

若是是iphone 3G和3GS,调用上面的结果,p_w_picpath1和p_w_picpath2获得的都是Default.png(320*480)这张图片,在查看p_w_picpath的size,你会发现是320*480的(按point来计),再看p_w_picpath的scale这个property是1.0,表示实际的1个piont对应了一个像素点,因此图片的实际像素是(320*scale)*(480*scale)=320*480.

若是是iphone4,返回的结果两个p_w_picpath都是Default@2x.png(640*960)这张图,再次查看p_w_picpath的size,你会发现仍然是320*480(points),可是scale是2.0,表示1个point对应图片上面的两个像素点,因此图片的实际像素是(320*scale)*(480*scale)=640*960.

因此,只用给同名的高清图加上@2x这个后缀,用UIImage的p_w_picpathNamed这个函数调用图片名(未带@2x的),就会自动帮你调用合适的图片,使用起来很方便.

你也可使用,UIImage的initWithContentsOfFile:(须要图片的完整路径)函数来load图片,可是这个不会帮你自动区分图片,你须要本身根据手机的分辨率来指定调用Default.png仍是Default@2x.png.


能够作以下一些测试,可以加深印象:
准备Default.png(320*480),Default@2x.png(640*960),DefaultCopy.png(320*480)和Default_Copy@2x.png(640*960)四张图,分别用p_w_picpathNamed:和initWithContentsOfFile:来调用(直接调用各个文件名:Default.png,Default@2x.png, DefaultCopy.png, Default_Copy@2x.png),而后分别在iphone 3G和iphone 4上面显示看效果,顺便输出p_w_picpath的size和scale来比较.会对这个问题有更渗入的理解.

举个例子:
上面提到过在iphone4上面用p_w_picpathNamed函数调Default.png,返回的是Default@2x.png(640*960)这张图,看起来就会很清楚.

可是若是调用DefaultCopy.png,由于它找不到DefaultCopy@2x.png这张高清图,只能用原来小size的图,因此返回仍是DefaultCopy.png(320*480),size是320*480,可是scale是1.0,实际图像的像素就是(320*scale)*(480*scale)=320*480,显示效果差,由于图片像素只有高清的1/4.

以上都是本人的一些简单的总结,不免会有疏漏不正确,多多包涵.
相关文章
相关标签/搜索