iOS CoreText 基本使用-按照唐巧的方式来写了一遍

废话不多说 直接上头文件 自己去Git下载吧 Git Link, press here to download

先看一下JSON 格式


[
{
"width": 200,
"height": 100,
"url": "http://f.hiphotos.baidu.com/image/pic/item/8435e5dde71190efeb7e4cc1cc1b9d16fdfa6023.jpg",
"type": "img"
},
{
"color": "blue",
"content": "this is first part and you can set your txt here. remember set default config",
"size": 30,
"type": "txt"
},
{
"color": "orange",
"content": "this is second part",
"size": 14,
"type": "txt"
},
{
"width": 100,
"height": 200,
"url": "http://h.hiphotos.baidu.com/image/pic/item/0824ab18972bd40762936ee279899e510fb3095c.jpg",
"type": "img"
},
{
"color": "red",
"content": "this is third part",
"size": 20,
"type": "txt"
},
{
"color": "blue",
"content": "press here to jump",
"size": 40,
"url": "http://www.baidu.com",
"type": "link"
}
]

然后看一下使用方法


XDisplayView * showView = [[XDisplayView alloc] initWithFrame:CGRectMake(0, 64, CGRectGetWidth([UIScreen mainScreen].bounds), 100)];

XViewHandle * config = [[XViewHandle alloc] init];
config.width = showView.width;

NSString * path = [[NSBundle mainBundle] pathForResource:@"content" ofType:@"json"];

XCoreTextData * data = [XFrameParser parseTemplateFile:path config:config];
showView.data = data;
showView.height = data.height;
showView.backgroundColor = [UIColor whiteColor];

[self.view addSubview:showView];

然后看一下实现的头文件


//
// XViewHandle.h
// XCoreText
//
// Created by Dylan on 15/1/17.
// Copyright (c) 2015年 Dylan. All rights reserved.
//

import

import

import

/*!

  • @brief 这里是DebugLog 大家都很常用吧 所以不啰嗦了
    */

ifdef DEBUG

define XLog(...) NSLog(VA_ARGS);

else

define XLog(...);

endif

/*!

  • @brief 颜色的定义呦
    */

define XRGB(R, G, B) [UIColor colorWithRed: R/255. green: G/255. blue: B/255. alpha: 1.0];

/*!

  • @brief 快速单例呦
    */

undef X_SINGLETON_DEC

define X_SINGLETON_DEC( __class ) \

  • (__class *)sharedInstance;

undef X_SINGLETON_DEF

define X_SINGLETON_DEF( __class ) \

  • (__class *)sharedInstance
    {
    static dispatch_once_t once;
    static __class * singleton;
    dispatch_once( &once, ^{ singleton = [[__class alloc] init]; } );
    return singleton;
    }

/*!

  • @brief 主线程呦
    */

define dispatch_main_safe(block)\

if ([NSThread isMainThread]) {
block();
} else {
dispatch_async(dispatch_get_main_queue(), block);
}

/*!

  • @brief Frame ParserConfig Attributes
    */
    @interface XViewHandle : NSObject

X_SINGLETON_DEC(XViewHandle)

/*!

  • @brief 一些基本的配置属性 Model
    */
    @property (assign, nonatomic) CGFloat width;
    @property (assign, nonatomic) CGFloat fontSize;
    @property (assign, nonatomic) CGFloat lineSpace;
    @property (strong, nonatomic) UIColor * textColor;

/*!

  • @brief 两个关于颜色的类方法 根据名称得到颜色 根据JSON得到颜色
    */
  • (UIColor *)colorWithName: (NSString *)string;

// JSON: [12, 22, 33]

  • (UIColor *)colorWithRGBArray: (NSArray *)array;

@end

/*!

  • @brief UIView ex
    */
    @interface UIView (frameHandle)

/*!

  • @brief 关于UIView的一些扩展喽 很方便的 开发中也可以使用呦
    */
  • (CGFloat)x;

  • (CGFloat)y;

  • (CGFloat)width;

  • (CGFloat)height;

  • (void)setX: (CGFloat)x;

  • (void)setY: (CGFloat)y;

  • (void)setWidth: (CGFloat)width;

  • (void)setHeight: (CGFloat)height;

@end

/*!

  • @brief Build CTFrameRef.
    */
    @class XCoreTextData;

static NSMutableAttributedString * result;

@interface XFrameParser : NSObject

/*!

  • @brief 解析的内容 仅限文字内容的多样化
  • @param content 内容
  • @param config 配置 就是上边说的基本配置嘿嘿
  • @return 返回这个东西喽 一个TextData模型
    */
  • (XCoreTextData *)parseContent: (NSString *)content config: (XViewHandle *)config;

/*!

  • @brief 解析AttributeString喽、
  • @param content 内容 就是一个AttributeString
  • @param config 配置
  • @return 返回TextData模型
    */
  • (XCoreTextData *)parseAttributesContent: (NSMutableAttributedString *)content config: (XViewHandle *)config;

/*!

  • @brief 这个是最重要的方法 解析JSON文件
  • @param filePath JSON文件的路径 也可以自己去更改方法 改为JSON内容 都是可以的呦
  • @param config 这里的配置就用来配置一下width 别的属性的值 你当然写到JSON文档中了、 JSON格式可以参考下边的content.JSON 文件呦
  • @return 返回TextData这个玩意
    */
  • (XCoreTextData *)parseTemplateFile: (NSString *)filePath config: (XViewHandle *)config;

@end

/*!

  • @brief Save CTFrameRef and Frame.
    */
    @interface XCoreTextData : NSObject

/*!

  • @brief 其实绘制 就是要ctFrame
    */
    @property (assign, nonatomic) CTFrameRef ctFrame;
    @property (assign, nonatomic) CGFloat height;

// 包含的图片数组
@property (strong, nonatomic) NSMutableArray * imageArray;

// 包含的链接数组
@property (strong, nonatomic) NSMutableArray * linkArray;

@end

/*!

  • @brief imageDataModel
    */
    @interface XCoreImageData : NSObject

// 这是image的模型呦、
@property (strong, nonatomic) NSString * url;
@property (assign, nonatomic) CGFloat position;
@property (assign, nonatomic) CGRect imagePosition;

@end

/*!

  • @brief linkDataModel
    */
    @interface XCoreLinkData : NSObject

// 这是链接的模型
@property (strong, nonatomic) NSString * title;
@property (strong, nonatomic) NSString * url;
@property (assign, nonatomic) NSRange range;

@end

@interface XTouch : NSObject

// 这是检测连接点击的方法 直接在tap手势的回掉方法里边 调用这个类方法就可以了。

  • (XCoreLinkData *)touchLinkInView: (UIView *)view atPoint: (CGPoint)point data: (XCoreTextData *)data;

@end

/*! JSON Format Example
[
{
"color": "blue", // or you can change this with Array contains R G B
"content": "With More Text", // content
"size": 16 // font size
"type": "txt" // type mains your content.
},
{
"width": 12., // image size
"height": 12.,
"url": "image url", // image url
"type": "img"
},
{
"color": "blue", // link color
"content": "Press Here", // link tip
"url": "http://www.baidu.com" // href
"type": "link"
}
]
*/

注释很明确、 h文件中文注释 m文件英文注释、 懒得切输入法、 祝大家观影愉快。 - - - Dylan.

你可能感兴趣的:(iOS CoreText 基本使用-按照唐巧的方式来写了一遍)