ps和pt转换
- px:相对长度单位。像素(Pixel)。(PS字体)
- pt:绝对长度单位。点(Point)。(iOS字体)
- UI标记图上给我们字体的大小一般都是像素点,如图
屏幕快照 2016-08-10 12.43.43 PM.png
- 但是实际开发中就算将字体标注值除以2(设备点),显示出来的效果依然不能达到UI的设计师的要求,于是一般默认我的默认做法是标注是除以2在加上2,例如:像素值34
UILabel*label = [[UILabel alloc] init];
// label.font = [UIFont systemFontOfSize:17 + 2];
label.font = [UIFont systemFontOfSize:19];
- 但是他们之间存在对应的转换关系
- pt=(px/96)*72。
- 一开始想的做法是给UIFont加一个分类或者搞一类继承,但是这样都不好(主要是不够装逼),之前学的Runtime都没用项目中,于是在这里试用一下
- 用法给UIFont加一个分类
- 例如runtime交换方法
- 项目中还是调用
// 传像素值
[UIFont systemFontOfSize:34.0];
#import "UIFont+Font.h"
#import <objc/message.h>
@implementation UIFont (Font)
+ (void)load {
Method systimeFont = class_getClassMethod(self, @selector(systemFontOfSize:));
Method qsh_systimeFont = class_getClassMethod(self, @selector(qsh_systemFontOfSize:));
// 交换方法
method_exchangeImplementations(qsh_systimeFont, systimeFont);
}
+ (UIFont *)qsh_systemFontOfSize:(CGFloat)pxSize{
CGFloat pt = (pxSize/96)*72;
NSLog(@"pt--%f",pt);
UIFont *font = [UIFont qsh_systemFontOfSize:pt];
return font;
}
@end
网友评论
这么算出来的UI,有问题。
#define UIFontFromPixel(pixel) ([UIFont systemFontOfSize:pixel*3/4])
为什么会是17 + 2的字号呢?
觉得应该为 pt = floor((px) / 96.0f * 72.0f)