TextKit 的使用----

TextKit是在iOS7中新出的,实现了对CoreText的封装,使用起来更加方便.

虽然是新出的,但也不代表立马就能上手-_-!!,TextKit可以实现图文混排效果,很好用.

1. 使用TextKit加载基本的文本

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

- (void)viewDidLoad

{

    [super
viewDidLoad];

    // 装载内容的容器

    NSTextStorage
*storage = [NSTextStorage
new];

    [storage replaceCharactersInRange:NSMakeRange(0, 0)

                           withString:

     @"未选择的路-弗罗斯特\n\n黄色的树林里分出两条路,\n可惜我不能同时去涉足,\n我在那路口久久伫立,\n我向着一条路极目望去,\n直到它消失在丛林深处。\n但我却选了另外一条路,\n它荒草萋萋,十分幽寂,\n显得更诱人、更美丽,\n虽然在这两条小路上,\n都很少留下旅人的足迹,\n虽然那天清晨落叶满地,\n两条路都未经脚印污染。\n啊,留下一条路等改日再见!\n但我知道路径延绵无尽头,\n恐怕我难以再回返。\n也许多少年后在某个地方,\n我将轻声叹息把往事回顾,\n一片树林里分出两条路,\n而我选了人迹更少的一条,\n从此决定了我一生的道路。"];

    

    // 给内容容器添加布局(可以添加多个)

    NSLayoutManager
*layoutManager = [NSLayoutManager
new];

    [storage addLayoutManager:layoutManager];

    

    // 带有内容和布局的容器

    NSTextContainer
*textContainer = [NSTextContainer
new];

    [layoutManager addTextContainer:textContainer];

    

    // 给TextView添加带有内容和布局的容器

    UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(10, 20, 300, 400)

                                               textContainer:textContainer];

    textView.layer.borderWidth = 1;

    textView.scrollEnabled = NO;

    textView.editable      = NO;

    [self.view addSubview:textView];

}

实现的过程如下:

storage --> layoutManager --> textContainer --> textView

这.....显示一串文本就要做这么多的事情.....

2. 高亮某些文本


- (void)viewDidLoad
{
[super viewDidLoad];

// 装载内容的容器
NSTextStorage *storage = [NSTextStorage new];
[storage replaceCharactersInRange:NSMakeRange(0, 0)
withString:
@"未选择的路-弗罗斯特\n\n黄色的树林里分出两条路,\n可惜我不能同时去涉足,\n我在那路口久久伫立,\n我向着一条路极目望去,\n直到它消失在丛林深处。\n但我却选了另外一条路,\n它荒草萋萋,十分幽寂,\n显得更诱人、更美丽,\n虽然在这两条小路上,\n都很少留下旅人的足迹,\n虽然那天清晨落叶满地,\n两条路都未经脚印污染。\n啊,留下一条路等改日再见!\n但我知道路径延绵无尽头,\n恐怕我难以再回返。\n也许多少年后在某个地方,\n我将轻声叹息把往事回顾,\n一片树林里分出两条路,\n而我选了人迹更少的一条,\n从此决定了我一生的道路。"];

// 高亮容器里面的某些内容
[storage addAttribute:NSForegroundColorAttributeName
value:[UIColor redColor]
range:NSMakeRange(0, 5)];
[storage addAttribute:NSForegroundColorAttributeName
value:[UIColor greenColor]
range:NSMakeRange(6, 4)];

// 给内容容器添加布局(可以添加多个)
NSLayoutManager *layoutManager = [NSLayoutManager new];
[storage addLayoutManager:layoutManager];

// 带有内容和布局的容器
NSTextContainer *textContainer = [NSTextContainer new];
[layoutManager addTextContainer:textContainer];

// 给TextView添加带有内容和布局的容器
UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(10, 20, 300, 400)
textContainer:textContainer];
textView.layer.borderWidth = 1;
textView.scrollEnabled = NO;
textView.editable = NO;
[self.view addSubview:textView];
}

可以用来设置的属性有这些,你懂得:)


/************************ Attributes ************************/

/* Predefined character attributes for text. If the key is not in the dictionary, then use the default values as described below.
*/
UIKIT_EXTERN NSString *const NSFontAttributeName NS_AVAILABLE_IOS(6_0); // UIFont, default Helvetica(Neue) 12
UIKIT_EXTERN NSString *const NSParagraphStyleAttributeName NS_AVAILABLE_IOS(6_0); // NSParagraphStyle, default defaultParagraphStyle
UIKIT_EXTERN NSString *const NSForegroundColorAttributeName NS_AVAILABLE_IOS(6_0); // UIColor, default blackColor
UIKIT_EXTERN NSString *const NSBackgroundColorAttributeName NS_AVAILABLE_IOS(6_0); // UIColor, default nil: no background
UIKIT_EXTERN NSString *const NSLigatureAttributeName NS_AVAILABLE_IOS(6_0); // NSNumber containing integer, default 1: default ligatures, 0: no ligatures
UIKIT_EXTERN NSString *const NSKernAttributeName NS_AVAILABLE_IOS(6_0); // NSNumber containing floating point value, in points; amount to modify default kerning. 0 means kerning is disabled. (note: values other than nil and 0 are unsupported on iOS)
UIKIT_EXTERN NSString *const NSStrikethroughStyleAttributeName NS_AVAILABLE_IOS(6_0); // NSNumber containing integer, default 0: no strikethrough
UIKIT_EXTERN NSString *const NSUnderlineStyleAttributeName NS_AVAILABLE_IOS(6_0); // NSNumber containing integer, default 0: no underline
UIKIT_EXTERN NSString *const NSStrokeColorAttributeName NS_AVAILABLE_IOS(6_0); // UIColor, default nil: same as foreground color
UIKIT_EXTERN NSString *const NSStrokeWidthAttributeName NS_AVAILABLE_IOS(6_0); // NSNumber containing floating point value, in percent of font point size, default 0: no stroke; positive for stroke alone, negative for stroke and fill (a typical value for outlined text would be 3.0)
UIKIT_EXTERN NSString *const NSShadowAttributeName NS_AVAILABLE_IOS(6_0); // NSShadow, default nil: no shadow
UIKIT_EXTERN NSString *const NSTextEffectAttributeName NS_AVAILABLE_IOS(7_0); // NSString, default nil: no text effect

UIKIT_EXTERN NSString *const NSAttachmentAttributeName NS_AVAILABLE_IOS(7_0); // NSTextAttachment, default nil
UIKIT_EXTERN NSString *const NSLinkAttributeName NS_AVAILABLE_IOS(7_0); // NSURL (preferred) or NSString
UIKIT_EXTERN NSString *const NSBaselineOffsetAttributeName NS_AVAILABLE_IOS(7_0); // NSNumber containing floating point value, in points; offset from baseline, default 0
UIKIT_EXTERN NSString *const NSUnderlineColorAttributeName NS_AVAILABLE_IOS(7_0); // UIColor, default nil: same as foreground color
UIKIT_EXTERN NSString *const NSStrikethroughColorAttributeName NS_AVAILABLE_IOS(7_0); // UIColor, default nil: same as foreground color
UIKIT_EXTERN NSString *const NSObliquenessAttributeName NS_AVAILABLE_IOS(7_0); // NSNumber containing floating point value; skew to be applied to glyphs, default 0: no skew
UIKIT_EXTERN NSString *const NSExpansionAttributeName NS_AVAILABLE_IOS(7_0); // NSNumber containing floating point value; log of expansion factor to be applied to glyphs, default 0: no expansion

UIKIT_EXTERN NSString *const NSWritingDirectionAttributeName NS_AVAILABLE_IOS(7_0); // NSArray of NSNumbers representing the nested levels of writing direction overrides as defined by Unicode LRE, RLE, LRO, and RLO characters. The control characters can be obtained by masking NSWritingDirection and NSTextWritingDirection values. LRE: NSWritingDirectionLeftToRight|NSTextWritingDirectionEmbedding, RLE: NSWritingDirectionRightToLeft|NSTextWritingDirectionEmbedding, LRO: NSWritingDirectionLeftToRight|NSTextWritingDirectionOverride, RLO: NSWritingDirectionRightToLeft|NSTextWritingDirectionOverride,

UIKIT_EXTERN NSString *const NSVerticalGlyphFormAttributeName NS_AVAILABLE_IOS(6_0); // An NSNumber containing an integer value. 0 means horizontal text. 1 indicates vertical text. If not specified, it could follow higher-level vertical orientation settings. Currently on iOS, it‘s always horizontal. The behavior for any other value is undefined.

/* This defines currently supported values for NSUnderlineStyleAttributeName and NSStrikethroughStyleAttributeName.
*/

3. 图文混排


- (void)viewDidLoad
{
[super viewDidLoad];

// 装载内容的容器
NSTextStorage *storage = [NSTextStorage new];
[storage replaceCharactersInRange:NSMakeRange(0, 0)
withString:
@"未选择的路-弗罗斯特\n\n黄色的树林里分出两条路,\n可惜我不能同时去涉足,\n我在那路口久久伫立,\n我向着一条路极目望去,\n直到它消失在丛林深处。\n但我却选了另外一条路,\n它荒草萋萋,十分幽寂,\n显得更诱人、更美丽,\n虽然在这两条小路上,\n都很少留下旅人的足迹,\n虽然那天清晨落叶满地,\n两条路都未经脚印污染。\n啊,留下一条路等改日再见!\n但我知道路径延绵无尽头,\n恐怕我难以再回返。\n也许多少年后在某个地方,\n我将轻声叹息把往事回顾,\n一片树林里分出两条路,\n而我选了人迹更少的一条,\n从此决定了我一生的道路。"];

// 高亮容器里面的某些内容
[storage addAttribute:NSForegroundColorAttributeName
value:[UIColor redColor]
range:NSMakeRange(0, 5)];
[storage addAttribute:NSForegroundColorAttributeName
value:[UIColor greenColor]
range:NSMakeRange(6, 4)];

// 给内容容器添加布局(可以添加多个)
NSLayoutManager *layoutManager = [NSLayoutManager new];
[storage addLayoutManager:layoutManager];

// 带有内容和布局的容器
NSTextContainer *textContainer = [NSTextContainer new];
[layoutManager addTextContainer:textContainer];

// 设置textContainer中要排斥的路径
UIImage *image = [UIImage imageNamed:@"show"];
CGRect areaRect = CGRectMake(5, 5, image.size.width, image.size.height);
UIBezierPath *ovalPath = [UIBezierPath bezierPathWithRect:areaRect];
textContainer.exclusionPaths = @[ovalPath];

// 给TextView添加带有内容和布局的容器
UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(10, 20, 300, 400)
textContainer:textContainer];
textView.layer.borderWidth = 1;
textView.scrollEnabled = YES;
textView.editable = YES;
[self.view addSubview:textView];

// 要显示的图片
UIImageView *showImageView = [[UIImageView alloc] initWithFrame:areaRect];
showImageView.image = image;
[textView addSubview:showImageView];
}

核心代码:

这是初级的使用,强大的功能需要自己去挖掘了.....

使用段落样式的代码:

TextKit 的使用----,布布扣,bubuko.com

时间: 2024-08-02 07:00:26

TextKit 的使用----的相关文章

iOS.TextKit.02.文字图片混合排版

1.案例如图 2.代码 TextKit02ViewController.h #import <UIKit/UIKit.h> @interface TextKit02ViewController : UIViewController @property (nonatomic,strong) IBOutlet UITextView *textView; @property (nonatomic,weak) IBOutlet UIImageView *imageView; // 文本可以排版的区域

Dynamic支持CollectionView布局 、 MotionEffects特效 、 BlurImage效果 、 TextKit

1 使用UIDynamicAnimator对集合视图进行布局 1.1 问题 UIKit Dynamic动力模型一个非常有趣的用途就是影响集合视图的布局,可以给集合视图的布局添加各种动力行为,使其产生丰富多彩的效果,本案例使用UIDynamicAnimator对集合视图进行布局,实现一个弹性列表,如图-1所示: 图-1 1.2 方案 首先创建一个SingleViewApplication项目,给UIColor类创建一个分类UIColor+RandomColor,提供一个产生随机颜色的静态方法ran

iOS.TextKit.01.凸版印刷效果

1.案例视图,如下图 2.代码 TextKit01ViewController.h #import <UIKit/UIKit.h> @interface TextKit01ViewController : UIViewController @property (nonatomic,strong) IBOutlet UITextView *textView; // 文本可以排版的区域 @property (nonatomic,strong) NSTextContainer *textContai

iOS 中TextKit的使用中,设置部分字体,出现的问题及解决方法

在ios的TextKit的使用中,设置部分字体大小的时候改变的字 体往往会比自己设置的多,这可能是因为你所设置的文字的那一段 话中出现的中文的标点符号,导致编译器不认识,从而出现问题. 把标点符号改成英文格式就好了.

iOS 7系列译文:认识 TextKit

OS 7:终于来了,TextKit.   功能 所以咱们到了.iOS7 带着 TextKit 登陆了.咱们看看它可以做什么!深入之前,我还想提一下,严格来说,这些事情中的大部分以前都可以做.如果你有大量的资源和时间来用CoreText构建一个文本引擎,这些都是可以做的.但是如果以前你想构建一个完善的富文本编辑器,你得花费几个月的时间.现在就非常简单,你只需要到在Xcode里打开一个界面文件,然后将UITextView拖到你的试图控制器,就可以获得所有的功能: 字距调整(Kerning):所有的字

用TextKit实现表情混排

Textkit是iOS7新推出的类库,其实是在之前推出的CoreText上的封装,有了这个TextKit,以后不用再拿着CoreText来做累活了,根据苹果的说法,他们开发了两年多才完成,而且他们在开发时候也将表情混排作为一个使用案例进行研究,所以要实现表情混排将会非常容易.     TextKit并没有新增的类,他是在原有的文本显示控件上的封装,可以使用平时我们最喜欢使用的UILabel,UITextField,UITextView里面就可以使用了.          1.NSAtrribut

用TextKit实现图文混排(转载)

Textkit是iOS7新推出的类库,其实是在之前推出的CoreText上的封装,有了这个TextKit,以后不用再拿着CoreText来做累活 了,根据苹果的说法,他们开发了两年多才完成,而且他们在开发时候也将表情混排作为一个使用案例进行研究,所以要实现表情混排将会非常容易.     TextKit并没有新增的类,他是在原有的文本显示控件上的封装,可以使用平时我们最喜欢使用的 UILabel,UITextField,UITextView里面就可以使用了.          1.NSAtrrib

初识 TextKit

iOS 7 的发布给开发者的案头带来了很多新工具.其中一个就是 TextKit.TextKit 由许多新的 UIKit 类组成,顾名思义,这些类就是用来处理文本的.在这里,我们将介绍 TextKit 的来由.它的组成,以及通过几个例子解释开发者怎样将它派上大用场. 但是首先我们得先阐明一个观点:TextKit 可能是近期对 UIKit 最重要的补充了.iOS 7 的新界面用纯文本按钮替换了大量的图标和边框.总的来说,文本和文本布局在新 OS 系统的视觉效果中所占有的重要性大大提高了.iOS7 的

IOS7 textkit 的相关

去年基于5.0开发的时候,自己用coreText编写了一个富文本,所有的效果都实现的很好.但是没有去测试效率,不过在cell重用的时候表现不错,在4s上面也不会卡顿. 唯一一个问题就是,在使用AL的时候,不方便.所以,此次新版本是基于7.0开发.决定使用textkit重新编写一次. 下面是一些基本的使用: @interface MMTextAttachment : NSTextAttachment { } @end @implementation MMTextAttachment //I wan