概述
iOS开发中,UXD中经常出现px、pt、sp、dp,以及@2x、@3x图片素材,都被搞糊涂了,这几天总结了下。
pt(点)
[UIScreen mainScreen].bounds
以及frame.size.width
等得出的都是pt,是Apple虚拟出的单位,主要用来描述iOS开发中的各个控件的坐标定位与大小
注意:iOS中的pt与photoshop中的pt不是一种东西,有不少说1pt=1/72的,这个跟iOS不是一回事,是印刷行业里的,具体参照关于 iOS 中 pt 的误解
px(像素)
像素。从iPhone 4开始,手机大小没有变,但是其中图像看着更细腻了,主要是因为px的原因。iPhone 3GS为320X480,而iPhone 4变为640 * 960,即从iPhone 3开始的1pt=1px,变为iPhone 4的1pt = 2px,单位英寸上像素更多了
@2x,@3x
假设有一张20px * 30px的图片image.png,在iPhone 3GS上会占据20X30个点,而在iPhone 4上仍然占据20 * 30个点,但是由于iPhone 4每个点包含的像素更多1pt=2px,因此图片会看起来更模糊,这时就需要有像素更多的图片40px * 60px来占据iPhone 4上20 * 30个点,此时这个图片就是image@2x.png
备注:image@2x.png,添加到Xcode中Assets.xcassets中,image@2x.png会自动添加到image图片的2x中,此时获取image.frame.size
为(20 , 30),如果手动将image@2x.png图片从2x拖动到1x中,此时获取image.frame.size
为(40 , 60),因此添加到Xcode中的图片不要随意的改变对应的1x,2x,3x位置
备注:
[UIScreen mainScreen].scale
可获取屏幕的比例因子,iPhone 3GS 为1;iPhone 4/5/6/6s等为2
ppi
pixel per inch,每英寸多少像素。iPhone 3GS 320px * 480px,3.5寸屏幕,因此ppi为165;同样,iPhone 4为330,因此,如果用在iPhone 3GS上的图片像素为20 * 30,名称为image.png,在iPhone 4上同样的图片像素为40 * 60,名称为image@2x.png
dp
安卓中的单位,意义与iOS中的pt相同,都是独立像素,都是为了避免ppi改变导致控件尺寸变化而产生的
sp
安卓字体的单位,与dp相似
iOS字体大小
iOS设置字体大小,例如label.font = [UIFont systemFontOfSize:30];
,代码中设置字体大小为30,单位为pt,此时label
中如果是中文,每个汉字的大小为30pt * 30 pt;如果是英文,则是15pt * 30pt(width * height)