整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

原 荐 iOS中支持HTML文本的标签控件-MDHT

原 荐 iOS中支持HTML文本的标签控件-MDHTMLLabel

OS中支持HTML文本的标签控件——MDHTMLLabel

一、引言

在iOS开发中对HTML的处理很多时候除了使用WebView外,还需要原生的控件对其进行渲染,例如将HTML字符串渲染为图文混排的View视图。Git上有很多轻量级的HTML渲染框架,列举一些如下:

RTLabel:基于UIView的HTML文本渲染控件,git地址:https://github.com/honcheng/RTLabel。

RCLabel:与RTLabel思路相同,基于RCLabel之上,也是UIView的子类,支持了对HTML中的本地图片标签进行渲染。git地址:https://github.com/Janak-Nirmal/RichContentLabel。

MDHTMLLabel:与RTLabel和RCLabel不同的是,其是UILabel的子类,更加轻量级,不能支持图片标签。git地址:https://github.com/mattdonnelly/MDHTMLLabel。

关于RCLabel对图片便签的支持,其只能支持本地的图片,不能支持远程URL图片链接,这在开发中将十分局限,以前我曾加RCLabel做了改造,加了支持远程图片URL的方法,我把它集成在了一个基础框架中,需要的伙伴可以参考下,git地址:https://github.com/ZYHshao/YHBaseFoundationTest。配套的讲解博客地址如下:http://my.oschina.net/u/2340880/blog/499311。

本篇博客主要讨论MDHTMLLabel的使用。

二、MDHTMLLabel的创建与设置

MDHTMLLabel框架十分小巧,其中只有两个文件,总计2000余行代码。通过HTML字符串来创建一个MDHTMLLabel控件示例代码如下:

    NSString * kDemoText=@"<a href='http://github.com/mattdonnelly/MDHTMLLabel'>MDHTMLLabel</a> is a lightweight, easy to use replacement for <b>UILabel</b> which allows you to fully <font face='Didot-Italic' size='19'>customize</font> the appearence of the text using HTML (with a few added features thanks to <b>CoreText</b>), as well letting you handle whenever a user taps or holds down on link and automatically detects ones not wrapped in anchor tags/>";
    MDHTMLLabel *htmlLabel=[[MDHTMLLabel alloc] initWithFrame:self.view.frame];
    htmlLabel.numberOfLines=0;
    htmlLabel.htmlText=kDemoText;
    [self.view addSubview:htmlLabel];

效果如下图所示:

MDHTMLLabel中可以设置的一些属性解析如下:

//设置超链接文字的属性字典 和设置AttributeString方法一致
@property (nonatomic, strong) NSDictionary *linkAttributes;
//设置超链接文字激活时的属性字典
@property (nonatomic, strong) NSDictionary *activeLinkAttributes;
//设置超链接非激活时的属性字典
@property (nonatomic, strong) NSDictionary *inactiveLinkAttributes;
//设置超链接文字触发长按事件的最小按下时间
@property (nonatomic, assign) NSTimeInterval minimumPressDuration;
//设置label文件阴影的模糊半径
@property (nonatomic, assign) CGFloat shadowRadius;
//设置label在高亮状态下的文字模糊半径 注:非高亮状态的由原生UILabel的属性设置
@property (nonatomic, assign) CGFloat highlightedShadowRadius;
//设置label在高亮状态下的文字阴影偏移 注:非高亮状态的由原生UILabel的属性设置
@property (nonatomic, assign) CGSize highlightedShadowOffset;
//设置在label高亮状态下的文字阴影颜色 注:非高亮状态的由原生UILabel的属性设置
@property (nonatomic, strong) UIColor *highlightedShadowColor;
//设置首行文字的缩进距离
@property (nonatomic, assign) CGFloat firstLineIndent;
//设置文字的行间距
@property (nonatomic, assign) CGFloat leading;
//设置行高的倍数
@property (nonatomic, assign) CGFloat lineHeightMultiple;
//设置文字内容的边距
@property (nonatomic, assign) UIEdgeInsets textInsets;
//设置文字垂直方向的对其模式 默认为居中对其 MDHTMLLabelVerticalAlignment枚举意义如下:
/*
typedef NS_ENUM(NSUInteger, MDHTMLLabelVerticalAlignment) {
    MDHTMLLabelVerticalAlignmentCenter=0, //居中对其
    MDHTMLLabelVerticalAlignmentTop=1, //顶部对其
    MDHTMLLabelVerticalAlignmentBottom=2, //底部对其
};
*/
@property (nonatomic, assign) MDHTMLLabelVerticalAlignment verticalAlignment;
//设置文字的截断模式
@property (nonatomic, strong) NSString *truncationTokenString;
//根据内容获取控件尺寸
+ (CGFloat)sizeThatFitsHTMLString:(NSString *)htmlString
 withFont:(UIFont *)font
 constraints:(CGSize)size
 limitedToNumberOfLines:(NSUInteger)numberOfLines;

关于HTML数据中的超链接的相应,MDHTMLLabel是通过代理回调的方式处理的,如下:

存的好处及应用:

1,可以让一些固定文件如css,js等文件在第二次访问的时候直接读取本地而不用再去请求服务器,这样可以减少客服端对服务器资源的请求压力,加快客户端的响应速度。

2,对于经常使用的数据源,可以将其存储在数据缓存中或者内存中,这样来减少数据库请求。

3,将网站部署在多台机器上,采用分布式方式处理,可以解决多个用户请求一台服务器造成的压力,也就是分布式部署。

4,将那么经常需要访问,但是数据又不需要经常变动的夜间做成静态页面。

Asp.Net提供了一个缓存方法来实现缓存:OutPutCache

OutPutCache中的属性:

1,Duration:页面或者用户控件缓存的时间,单位是秒,

2,Location:输出缓存的存放位置

a)Any:客户端浏览器,代理服务器,服务端服务器等

b)Client:请求浏览的浏览器

c)DownStram:代理服务器,发出 请求的客户端

d)None:对于请求的页面,禁用输出缓存

e)Server:请求的web服务器

f)ServerAndClient:发送请求的客户端跟原服务器

3,CacheProfile:配置文件中缓存配置的名称,这个配置可选,

4,NoStroe:决定了是否阻止敏感信息的二级存储

5,ProviderName:表示使用的自定义输出缓存提供程序

6,Shared:确定用户控件输出是否可以被多个页共享

7,SqlDependency:表示一组数据库/表名称 对应的字符串名页或控件的输出缓存依赖于这些名称对。请注意,SqlCacheDependency 类监视输出缓存所依赖的数据库中的表,因此当更新表中的项时,使用基于表的轮询时将从缓存中移除这些项。如果以值 CommandNotification: 使用通知(在 Microsoft SQL Server 2005 中),则最终会使用 SqlDependency 类向 SQL Server 2005 服务器注册查询通知。

8,VaryByCustom:任何表示自定义输出缓存要求的文本。如果特性的赋值为 browser,缓存将随浏览器名称和主要版本信息的不同而异。如果输入自定义字符串,则必须在应用程序的 Global.asax 文件中重写 GetVaryByCustomString 方法。

9,VaryByHeader:分号分隔的 HTTP 标头列表,用于使输出缓存发生变化。将该特性设为多标头时,对于每个指定标头组合,输出缓存都包含一个不同版本的请求文档。

esium.knock能够使Cesium球体监听html控件,从而根据控件的值实时改变一些场景属性。

knockout

添加html控件

<div id="toolbar" class="param-container tool-bar">
		<table>
			<tbody>
  			<tr>
					<td>亮度</td>
					<td>
						<input type="range" min="0" max="2" step="0.02" data-bind="value: brightness, valueUpdate: 'input'">
					</td>
				</tr>
			</tbody>
	</table>
</div>

使用knockout双向绑定数据