美文网首页iOS开发UI设计iOS提升
iOS字体(UIFont)与px设计字体换算

iOS字体(UIFont)与px设计字体换算

作者: 我是三人禾 | 来源:发表于2016-08-10 14:00 被阅读6347次

    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,有问题。
        我是三人禾:啥问题
      • 我本善良:问下楼主这个pt=(px/96)*72。是怎么推算出来的?假如换成其他样式的字体,该怎么破呢?:smile:
      • a0147520:根据你的提示写成宏
        #define UIFontFromPixel(pixel) ([UIFont systemFontOfSize:pixel*3/4])
        :smile:
        我是三人禾:@a0147520 可以,很6
      • MichealZJ:写得不错,只是文中的公式有点问题。pt=(px/96)*72 => px=(4/3)pt 那么我们把UI给的10px换算成pt为单位那岂不就是10*(4/3)了。应该是1 px = (3/4)pt,所以我们在px转pt时直接在px的数值上乘以比例3/4。
        MichealZJ:@秦始皇的秦 不谢哈
        我是三人禾:@MichealZJ 谢谢
      • AnnieAri:UI在给字体大小时 是直接截取的字体顶部到底部距离的像素值 所以没有什么换算
      • fengzila:感觉有些奇怪,34 / 96 * 72 = 25.5
        为什么会是17 + 2的字号呢?
        我是三人禾:这是当时UI帮我参考的,当时给我解释了一通,不过都忘记了
      • AgoniNemo:不太明白为为什么是pt=(px/96)*72这样的关系
        我是三人禾:@AgoniNemo 这是公司UI给我说的 字体换算的比例
      • 650c659e28f7:pt=(px/96)*72 个人感觉有问题 这样做得不出小数

        觉得应该为 pt = floor((px) / 96.0f * 72.0f)
        灰客:(CGFloat)pxSize 别个方法名就已经把pxSize弄成float的了
      • 杨小仙仙:刚好能用到 感谢(❁´ω`❁)

      本文标题:iOS字体(UIFont)与px设计字体换算

      本文链接:https://www.haomeiwen.com/subject/sgfjsttx.html