TextKit简介

在iOS7之前我们要实现图文混排要使用CoreText,iOS6时有了Attribute string 可以解决一些简单的富文本需求。直到iOS7 苹果推出了TextKit,TextKit是基于CoreText的并且做了面向对象的封装,这也决定了TextKit的易用性。

NSAttributeString示例

        let label = UILabel(frame: CGRectMake(0, 20, view.bounds.size.width, 100))
let labelString = "¥2000 元/位"
let attributeString = NSMutableAttributedString(string: labelString) let attributes = [
NSForegroundColorAttributeName : UIColor.redColor(),
NSFontAttributeName : UIFont.systemFontOfSize(36)
]
attributeString.addAttributes(attributes, range: NSRange(location: 0, length: 5)) label.attributedText = attributeString view.addSubview(label)

上面个例子主要使用addAttributes/addAttribute来实现富文本的效果,一些常用的键:

  • NSForegroundColorAttributeName:(UIcolor)文字颜色。
  • NSFontAttributeName:(UIFont)文字字体。
  • NSBackgroundColorAttributeName:(UIColor)背景色。
  • NSKernAttributeName:(NSNumber(float))字符之间的间距。
  • NSStrikethroughStyleAttributeName:(NSNumber(integer))删除线,值为宽度。
  • NSStrikethroughColorAttributeName:(UIColor)删除线颜色。
  • NSUnderlineStyleAttributeName:(NSNumber(integer))下划线,值为宽度。
  • NSShadowAttributeName:(NSShadow)阴影。
  • NSObliquenessAttributeName:(NSNumber(float))倾斜。
  • NSAttachmentAttributeName:(NSTextAttachment)图文混排。
  • NSParagraphStyleAttributeName:(NSParagraphStyle)段落样式。

Dynamic Type(动态文本)

Dynamic Type是iOS7中给我们的开发带来变化最多的特性之一,它的作用是让应用中的字体大小遵循你设置的字体大小和粗细,这会更加增强可读性和用户体验。

为了让自己的应用支持Dynamic Type需要设置文本支持某一个风格而不是指定具体的字体,方法是:UIFont.preferredFontForTextStyle(样式)。

这个方法会根据你设置的样式和用户设置的字体大小来返回一个字体。

注意:在iOS8中Tableview的cell如果没有自定义,那么无需设置动态文本 它是已经封装好的,并且在切出程序进入设置调整字体大小后再切回 也会即可做出字体改变。但是在iOS7中或自定义cell时需要手动设置动态文本。

cell.textLabel?.font = UIFont.preferredFontForTextStyle(UIFontTextStyleHeadline)

textView.font = UIFont.preferredFontForTextStyle(UIFontTextStyleBody)

但是现在还有一个问题,如果是iOS7环境只需要设置这些是不够的,需要监听通知 这样在切出应用设置字体后才能及时作出改变。

    override func viewDidLoad() {
super.viewDidLoad() NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(NoteListController.preferredContentSizeDidChange(_:)), name: UIContentSizeCategoryDidChangeNotification, object: nil)
} // 刷新tableview数据
func preferredContentSizeDidChange(notification: NSNotification) {
tableView.reloadData()
}
    override func viewDidLoad() {
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(NoteContentController.preferredContentSizeDidChange(_:)), name: UIContentSizeCategoryDidChangeNotification, object: nil) textView.font = UIFont.preferredFontForTextStyle(UIFontTextStyleBody)
} // 设置textview的font
func preferredContentSizeDidChange(notification: NSNotification) {
textView.font = UIFont.preferredFontForTextStyle(UIFontTextStyleBody)
}

设置好后是这样的效果

       

       

创建环绕路径

先来看下效果:

可以看出textview的文字避开了时间视图,下面来看下代码:

// 首先创建timeview 添加到textview上
let date = TimeView(date: NSDate())
textView.addSubview(date) self.timeView = date // 重写viewDidLayoutSubviews 在controller布局子视图的时候更新timeview的size 然后设置frame 最后指定环绕路径
override func viewDidLayoutSubviews() {
timeView.updateSize()
timeView.frame = CGRectOffset(timeView.frame, textView.frame.width - timeView.frame.width, 0)
// 注意 指定的环绕路径是数组 这证明textview可以指定多个环绕路径 类型为[UIBezierPath] curvePathWithOrigin方法是通过一个CGPoint返回一个UIBezierPath 这个路径就是圆形的路径
textView.textContainer.exclusionPaths = [timeView.curvePathWithOrigin(timeView.center)]
}

学习TextKit框架(上)的更多相关文章

  1. Spring框架学习总结(上)

    目录 1.Spring的概述 2.Spring的入门(IOC) 3.Spring的工厂类 4.Spring的配置 5.Spring的属性注入 6.Spring的分模块开发的配置 @ 1.Spring的 ...

  2. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  3. 深入学习微框架:Spring Boot(转)

    转:http://www.infoq.com/cn/articles/microframeworks1-spring-boot/ 相关参考: https://spring.io/guides/gs/s ...

  4. 人工智能范畴及深度学习主流框架,IBM Watson认知计算领域IntelligentBehavior介绍

    人工智能范畴及深度学习主流框架,IBM Watson认知计算领域IntelligentBehavior介绍 工业机器人,家用机器人这些只是人工智能的一个细分应用而已.图像识别,语音识别,推荐算法,NL ...

  5. 人工智能深度学习Caffe框架介绍,优秀的深度学习架构

    人工智能深度学习Caffe框架介绍,优秀的深度学习架构 在深度学习领域,Caffe框架是人们无法绕过的一座山.这不仅是因为它无论在结构.性能上,还是在代码质量上,都称得上一款十分出色的开源框架.更重要 ...

  6. 从Theano到Lasagne:基于Python的深度学习的框架和库

    从Theano到Lasagne:基于Python的深度学习的框架和库 摘要:最近,深度神经网络以“Deep Dreams”形式在网站中如雨后春笋般出现,或是像谷歌研究原创论文中描述的那样:Incept ...

  7. 深入浅出学习Hibernate框架(一):从实例入手初识Hibernate框架

    这篇博客是hibernate学习的第一篇,主要简介hibernate框架,之后简单说一下hibernate的文件夹结构,最后写一个简单的hibernate实例.通过这三步来简单的认识一下hiberna ...

  8. 深入浅出学习Spring框架(四):IoC和AOP的应用——事务配置

    在前文 深入浅出学习Spring框架(一):通过Demo阐述IoC和DI的优势所在. 深入浅出学习Spring框架(三):AOP 详解 分别介绍了Spring的核心功能——IoC和AOP,光讲知识远远 ...

  9. 跟着刚哥学习Spring框架--创建HelloWorld项目(一)

    1.Spring框架简介 Spring是一个开源框架,Spring是在2003年兴起的一个轻量级的开源框架,由Rod johnson创建.主要对JavaBean的生命周期进行管理的轻量级框架,Spri ...

随机推荐

  1. hdu2571 命运 动态规划Dp

    转载请注明出处:http://blog.csdn.net/u012860063 题目链接:pid=2571" target="_blank">http://acm. ...

  2. 关机相关(shutdown,reboot)

    慣用的關機指令: shutdown 由於Linux的關機是那麼重要的工作,因此除了你是在主機前面以tty7圖形介面來登入系統時, 不論用什麼身份都能夠關機之外,若你是使用遠端管理工具(如透過piett ...

  3. mysql 函数在源码中的定义

    大牛那海蓝蓝 MySQL提供了较为丰富的SQL语句,用以支持MySQL提供的主要功能.在数据库内部,MySQL又是怎么知道自己能够处理哪些对象.处理哪些事情的? 如果我们输入一条SQL语句,MySQL ...

  4. careercup-排序和查找 11.1

    11.1 给定两个排序后的数组A和B,其中A的末端有足够的缓冲空间容纳B.编写一个方法,将B合并入A并排序. 解法: 已知数组A末端有足够的缓冲,不需要再分配额外空间.程序的处理逻辑很简单,就是逐一比 ...

  5. 聊聊动画引擎 pop

    iOS可以通过CADisplayLink实现自定义动画引擎,pop就是基于此实现的,而且比原生Core Animation更强大好用.譬如当ViewController侧滑返回的时候,系统会将Core ...

  6. mac 终端中添加tree命令显示文件目录结构

      在Ubuntu下,通过 sudo apt-get install tree 可以使用tree命令,显示文件目录列表,如图所示: 在mac OS X系统下怎么使用呢? 在终端输入: cd $home ...

  7. HttpClient4.4 进行Http连接通讯

    以前一直使用jdk自带的urlConnection来进行http通讯,HttpClient与之相比,HttpClient更具有灵活度和易用性.HttpClient能够方便使用连接池,使用时需要重新创建 ...

  8. linux下svn服务搭建

    安装svn需要依赖apr和apr-util这两个软件,所以先安装这两个软件 下载安装APR wget http://apache.fayea.com//apr/apr-1.5.2.tar.gz .ta ...

  9. html代码实现自动滚动,鼠标滑过时停止滚动

    <marquee style="width: 1200px;height:200px;margin:0px auto" onmouseout="this.start ...

  10. access应用分享

    我最近开发了一个winform项目,用的是access数据库,当开发成功以后,有些电脑上就能正常运行,有些电脑就无法读取数据库文件,刚开始我以为是权限问题,后来我把安装程序卸载了,装在其它盘中(非C盘 ...