在iOS開發(fā)中對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圖片鏈接,這在開發(fā)中將十分局限,以前我曾加RCLabel做了改造,加了支持遠程圖片URL的方法,我把它集成在了一個基礎框架中,需要的伙伴可以參考下,git地址:https://github.com/ZYHshao/YHBaseFoundationTest。配套的講解博客地址如下:http://my.oschina.net/u/2340880/blog/499311。
本篇博客主要討論MDHTMLLabel的使用。
MDHTMLLabel框架十分小巧,其中只有兩個文件,總計2000余行代碼。通過HTML字符串來創(chuàng)建一個MDHTMLLabel控件示例代碼如下:
NSString * kDemoText=@"<a >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;
//設置超鏈接文字觸發(fā)長按事件的最小按下時間
@property (nonatomic, assign) NSTimeInterval minimumPressDuration;
//設置label文件陰影的模糊半徑
@property (nonatomic, assign) CGFloat shadowRadius;
//設置label在高亮狀態(tài)下的文字模糊半徑 注:非高亮狀態(tài)的由原生UILabel的屬性設置
@property (nonatomic, assign) CGFloat highlightedShadowRadius;
//設置label在高亮狀態(tài)下的文字陰影偏移 注:非高亮狀態(tài)的由原生UILabel的屬性設置
@property (nonatomic, assign) CGSize highlightedShadowOffset;
//設置在label高亮狀態(tài)下的文字陰影顏色 注:非高亮狀態(tài)的由原生UILabel的屬性設置
@property (nonatomic, strong) UIColor *highlightedShadowColor;
//設置首行文字的縮進距離
@property (nonatomic, assign) CGFloat firstLineIndent;
//設置文字的行間距
@property (nonatomic, assign) CGFloat leading;
//設置行高的倍數(shù)
@property (nonatomic, assign) CGFloat lineHeightMultiple;
//設置文字內(nèi)容的邊距
@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;
//根據(jù)內(nèi)容獲取控件尺寸
+ (CGFloat)sizeThatFitsHTMLString:(NSString *)htmlString
withFont:(UIFont *)font
constraints:(CGSize)size
limitedToNumberOfLines:(NSUInteger)numberOfLines;
關于HTML數(shù)據(jù)中的超鏈接的相應,MDHTMLLabel是通過代理回調的方式處理的,如下:
存的好處及應用:
1,可以讓一些固定文件如css,js等文件在第二次訪問的時候直接讀取本地而不用再去請求服務器,這樣可以減少客服端對服務器資源的請求壓力,加快客戶端的響應速度。
2,對于經(jīng)常使用的數(shù)據(jù)源,可以將其存儲在數(shù)據(jù)緩存中或者內(nèi)存中,這樣來減少數(shù)據(jù)庫請求。
3,將網(wǎng)站部署在多臺機器上,采用分布式方式處理,可以解決多個用戶請求一臺服務器造成的壓力,也就是分布式部署。
4,將那么經(jīng)常需要訪問,但是數(shù)據(jù)又不需要經(jīng)常變動的夜間做成靜態(tài)頁面。
Asp.Net提供了一個緩存方法來實現(xiàn)緩存:OutPutCache
OutPutCache中的屬性:
1,Duration:頁面或者用戶控件緩存的時間,單位是秒,
2,Location:輸出緩存的存放位置
a)Any:客戶端瀏覽器,代理服務器,服務端服務器等
b)Client:請求瀏覽的瀏覽器
c)DownStram:代理服務器,發(fā)出 請求的客戶端
d)None:對于請求的頁面,禁用輸出緩存
e)Server:請求的web服務器
f)ServerAndClient:發(fā)送請求的客戶端跟原服務器
3,CacheProfile:配置文件中緩存配置的名稱,這個配置可選,
4,NoStroe:決定了是否阻止敏感信息的二級存儲
5,ProviderName:表示使用的自定義輸出緩存提供程序
6,Shared:確定用戶控件輸出是否可以被多個頁共享
7,SqlDependency:表示一組數(shù)據(jù)庫/表名稱 對應的字符串名頁或控件的輸出緩存依賴于這些名稱對。請注意,SqlCacheDependency 類監(jiān)視輸出緩存所依賴的數(shù)據(jù)庫中的表,因此當更新表中的項時,使用基于表的輪詢時將從緩存中移除這些項。如果以值 CommandNotification: 使用通知(在 Microsoft SQL Server 2005 中),則最終會使用 SqlDependency 類向 SQL Server 2005 服務器注冊查詢通知。
8,VaryByCustom:任何表示自定義輸出緩存要求的文本。如果特性的賦值為 browser,緩存將隨瀏覽器名稱和主要版本信息的不同而異。如果輸入自定義字符串,則必須在應用程序的 Global.asax 文件中重寫 GetVaryByCustomString 方法。
9,VaryByHeader:分號分隔的 HTTP 標頭列表,用于使輸出緩存發(fā)生變化。將該特性設為多標頭時,對于每個指定標頭組合,輸出緩存都包含一個不同版本的請求文檔。
esium.knock能夠使Cesium球體監(jiān)聽html控件,從而根據(jù)控件的值實時改變一些場景屬性。
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雙向綁定數(shù)據(jù)
*請認真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。