文档章节

一些常见的知识(四)

人独立
 人独立
发布于 2015/01/16 14:22
字数 1070
阅读 14
收藏 1
24、CoreText基础-字体必修课
 
 
转自:http://www.dreamingwish.com/dream-2011/coretext-ji-chu-font-basis.html
 
介绍一些字体的术语,以及对应的英文名称
 
字体(Font):是一系列字号、样式和磅值相同的字符(例如:10磅黑体Palatino)。现多被视为字样的同义词
 
字面(Face):是所有字号的磅值和格式的综合
 
字体集(Font family):是一组相关字体(例如:Franklin family包括Franklin Gothic、Fran-klinHeavy和Franklin Compressed)
 
磅值(Weight):用于描述字体粗度。典型的磅值,从最粗到最细,有极细、细、book、中等、半粗、粗、较粗、极粗
 
样式(Style):字形有三种形式:Roman type是直体;oblique type是斜体;utakuc type是斜体兼曲线(比Roman type更像书法体)。
 
x高度(X height):指小写字母的平均高度(以x为基准)。磅值相同的两字母,x高度越大的字母看起来比x高度小的字母要大
 
Cap高度(Cap height):与x高度相似。指大写字母的平均高度(以C为基准)
 
下行字母(Descender):例如在字母q中,基线以下的字母部分叫下伸部分
 
上行字母(Ascender):x高度以上的部分(比如字母b)叫做上伸部分
 
基线(Baseline):通常在x、v、b、m下的那条线
 
描边(Stroke):组成字符的线或曲线。可以加粗或改变字符形状
 
衬线(Serif):用来使字符更可视的一条水平线。如字母左上角和下部的水平线。
 
无衬线(Sans Serif):可以让排字员不使用衬线装饰。
 
方形字(Block):这种字体的笔画使字符看起来比无衬线字更显眼,但还不到常见的衬线字的程度。例如Lubalin Graph就是方形字,这种字看起来好像是木头块刻的一样
 
手写体脚本(Calligraphic script):是一种仿效手写体的字体。例如Murray Hill或者Fraktur字体
 
艺术字(Decorative):像绘画般的字体
 
Pi符号(Pisymbol):非标准的字母数字字符的特殊符号。例如Wingdings和Mathematical Pi
 
连写(Ligature):是一系列连写字母如fi、fl、ffi或ffl。由于字些字母形状的原因经常被连写,故排字员已习惯将它们连写。
 
 
 
25、准确计算CoreText高度的方法
 
- (int)getAttributedStringHeightWithString:(NSAttributedString *)  string  WidthValue:(int) width
{
   int total_height = 0;
    
   CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)string);    //string 为要计算高度的NSAttributedString
   CGRect drawingRect = CGRectMake(0, 0, width, 1000);  //这里的高要设置足够大
   CGMutablePathRef path = CGPathCreateMutable();
   CGPathAddRect(path, NULL, drawingRect);
   CTFrameRef textFrame = CTFramesetterCreateFrame(framesetter,CFRangeMake(0,0), path, NULL);
   CGPathRelease(path);
   CFRelease(framesetter);
    
   NSArray *linesArray = (NSArray *) CTFrameGetLines(textFrame);
    
   CGPoint origins[[linesArray count]];
   CTFrameGetLineOrigins(textFrame, CFRangeMake(0, 0), origins);
    
   int line_y = (int) origins[[linesArray count] -1].y;  //最后一行line的原点y坐标
    
   CGFloat ascent;
   CGFloat descent;
   CGFloat leading;
    
   CTLineRef line = (CTLineRef) [linesArray objectAtIndex:[linesArray count]-1];
   CTLineGetTypographicBounds(line, &ascent, &descent, &leading);
    
   total_height = 1000 - line_y + (int) descent +1;    //+1为了纠正descent转换成int小数点后舍去的值
    
   CFRelease(textFrame);
    
   return total_height;
    
}
 
  
 
//关于line坐标位置y为下图黑线所在位置 descent为黑线下部分字体的高度
 
//关于字体各部分高度说明  http://ios-iphone.diandian.com/post/2012-03-29/18055023  
 
 
26、自定义拷贝、粘贴窗口
 
(1)、重写canBecomeFirstResponder方法
 
  - (BOOL)canBecomeFirstResponder{
   
  [super canBecomeFirstResponder];
  return YES;
}
 
(2)、创建自定义UIMenuController
 
  UIMenuItem *share = [[UIMenuItem alloc] initWithTitle:@"分享" action:@selector(share:)];
   UIMenuItem *email = [[UIMenuItem alloc] initWithTitle:@"邮件" action:@selector(email:)];
   UIMenuItem *print = [[UIMenuItem alloc] initWithTitle:@"打印" action:@selector(print:)];
 
   UIMenuController *menu = [UIMenuController sharedMenuController];
   [menu setMenuItems:[NSArray arrayWithObjects:share, email,print, nil]];
   [menu setTargetRect:self.frame inView:self.superview];
   [menu setMenuVisible:YES animated:YES];
 
(3)、判断显示哪个menu
 
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
  [super canPerformAction:action withSender:sender];
  
  if ( action == @selector(share:) || action == @selector(email:) || action == @selector(print:))
  {
      return YES;    
  }
  else
  {
      return NO;
  }
}
 
  
 
 
27、iOS本地推送通知方法
 
   
可在应用后台执行时,本地弹出推送通知,也可以定时触发推送。
 
- (void)applicationDidEnterBackground:(UIApplication *)application
{
    
   UIDevice* device = [UIDevice currentDevice];
    
   BOOL backgroundSupported = NO;
    
   if ([device respondsToSelector:@selector(isMultitaskingSupported)])
   {    
       backgroundSupported = device.multitaskingSupported;
   }
   if (backgroundSupported && _bgTask==UIBackgroundTaskInvalid)
   {
       UIApplication *app = [UIApplication sharedApplication];
        
       _bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
       }];  
        
        
       dispatch_async(dispatch_get_main_queue(), ^{
            
           while (app.applicationState==UIApplicationStateBackground && _bgTask!=UIBackgroundTaskInvalid  && [app backgroundTimeRemaining] > 10)  
           {
               [NSThread sleepForTimeInterval:1];
               NSLog(@"background task %d left left  time %d.", _bgTask, (int)[app backgroundTimeRemaining]);
                                
               if ([app backgroundTimeRemaining] < 580)
               {
                   UILocalNotification *localNotif = [[UILocalNotification alloc] init];
                   if (localNotif)
                   {
                       localNotif.alertBody = [NSString stringWithString:@"测试本地通知消息,后台提示功能。"];
                       localNotif.alertAction = NSLocalizedString(@"查看", nil);
                       localNotif.soundName = UILocalNotificationDefaultSoundName;
                       localNotif.applicationIconBadgeNumber = 1;            
                       [application presentLocalNotificationNow:localNotif];
                       [localNotif release];
                       break;
                   }
               }
           }
            
           NSLog(@"background task %d finished.", _bgTask);     
           [app endBackgroundTask:_bgTask];
           _bgTask = UIBackgroundTaskInvalid;   
               
       });      
   }
 
}
 
28、CoreText绘制文本出现行间距不等及解决办法
 
 
转自: http://willonboy.tk/?p=1163
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  
 
 
最终在http://www.cocoanetics.com/2012/02/radar-coretext-line-spacing-bug/
 
找到了DTCoreText库


© 著作权归作者所有

人独立
粉丝 5
博文 38
码字总数 17675
作品 0
昌平
程序员
私信 提问
阿里云ACE认证学习知识点梳理

学习知识点梳理 第一部分:阿里云产品学习 一、阿里云相关概念深化学习 二、阿里云相关产品感性认识及场景化学习 三、阿里云产品上手操作 四、阿里云大数据产品概念、应用场景 五、阿里云安全...

张嵘鑫
02/15
0
0
分布式架构师:这些都是我要掌握的知识

前一段时间在网上看见了一篇文章内容大致是 作为一个架构师你需要拥有什么样的能力,其中不过是包括以下几个点: 1、对于Java基础技术体系(包括JVM、类装载机制、多线程并发、IO、网络)有一...

大齐老师
2018/01/06
0
0
跟着动画来学习TCP三次握手和四次挥手

TCP三次握手和四次挥手的问题在面试中是最为常见的考点之一。很多读者都知道三次和四次,但是如果问深入一点,他们往往都无法作出准确回答。 本篇尝试使用动画来对这个知识点进行讲解,期望读...

hgditren
2018/07/27
0
0
跟着动画学习 TCP 三次握手和四次挥手

TCP三次握手和四次挥手的问题在面试中是最为常见的考点之一。很多读者都知道三次和四次,但是如果问深入一点,他们往往都无法作出准确回答。 本篇尝试使用动画来对这个知识点进行讲解,期望读...

2018/06/28
0
0
【转】跟着动画来学习TCP三次握手和四次挥手

最近看到一篇很通俗易懂的描述TCP三次握手和四次挥手概念的文章,觉得特别好,怕以后找不到了,特意转载在这里学习一下。 原文地址:跟着动画来学习TCP三次握手和四次挥手 作者:老錢 链接:...

欧阳鹏
2018/07/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Mybatis Plus删除

/** @author beth @data 2019-10-17 00:30 */ @RunWith(SpringRunner.class) @SpringBootTest public class DeleteTest { @Autowired private UserInfoMapper userInfoMapper; /** 根据id删除......

一个yuanbeth
今天
4
0
总结

一、设计模式 简单工厂:一个简单而且比较杂的工厂,可以创建任何对象给你 复杂工厂:先创建一种基础类型的工厂接口,然后各自集成实现这个接口,但是每个工厂都是这个基础类的扩展分类,spr...

BobwithB
今天
4
0
java内存模型

前言 Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文我们要讨论的JVM内存结构、Java内存模...

ls_cherish
今天
4
0
友元函数强制转换

友元函数强制转换 p522

天王盖地虎626
昨天
5
0
js中实现页面跳转(返回前一页、后一页)

本文转载于:专业的前端网站➸js中实现页面跳转(返回前一页、后一页) 一:JS 重载页面,本地刷新,返回上一页 复制代码代码如下: <a href="javascript:history.go(-1)">返回上一页</a> <a h...

前端老手
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部