解析iPhone wap瀏覽器之界面架構(gòu)
出處:藍(lán)色魅力 發(fā)布于:2011-08-26 12:33:17
iPhone由蘋(píng)果公司(Apple, Inc.)執(zhí)行官史蒂夫·喬布斯在2007年1月9日舉行的Macworld宣布推出,2007年6月29日在美國(guó)上市,將創(chuàng)新的移動(dòng)電話、可觸摸寬屏iPod以及具有桌面級(jí)電子郵件、網(wǎng)頁(yè)瀏覽、搜索和地圖功能的突破性因特網(wǎng)通信設(shè)備這三種產(chǎn)品完美地融為一體。iPhone引入了基于大型多觸點(diǎn)顯示屏和性新軟件的全新用戶(hù)界面,讓用戶(hù)用手指即可控制iPhone。iPhone還開(kāi)創(chuàng)了移動(dòng)設(shè)備軟件功能的新紀(jì)元,重新定義了移動(dòng)電話的功能。
BSD是UNIX系統(tǒng)中通用的網(wǎng)絡(luò)接口,它不僅支持各種不同的網(wǎng)絡(luò)類(lèi)型,而且也是一種內(nèi)部進(jìn)程之間的通信機(jī)制。兩個(gè)通信進(jìn)程都用一個(gè)套接口來(lái)描述通信鏈路的兩端。套接口可以認(rèn)為是一種特殊的管道,但和管道不同的是,套接口對(duì)于可以容納的數(shù)據(jù)的大小沒(méi)有限制。Linux支持多種類(lèi)型的套接口,也叫做套接口尋址族,這是因?yàn)槊糠N類(lèi)型的套接口都有自己的尋址方法。
Linux支持以下的套接口類(lèi)型:
UNIX UNIX域套接口
INET Internet地址族TCP/IP協(xié)議支持通信。
AX25 Amateur radio X25
IPX Novell IPX
APPLE TALK Appletalk DDP
X25 X25
這些類(lèi)型的套接口代表各種不同的連接服務(wù)。
在筆者的上篇文章《自己動(dòng)手寫(xiě)iPhone wap瀏覽器之BSD Socket引擎篇》中已經(jīng)成功解析出來(lái)了wml頁(yè)面中的tag,如果讀者仔細(xì)的話可能會(huì)看到里面中文的tag顯示為亂碼,這是因?yàn)樵趇Phone上默認(rèn)的中文編碼格式是UTF-8,而通過(guò)BSD Socket請(qǐng)求過(guò)來(lái)的是ASCII碼,所以需要通過(guò)轉(zhuǎn)換為UTF-8格式,如下:
[[NSString alloc] initWithBytes:aChild-》Value() length:strlen(aChild-》Value()) encoding:NSUTF8StringEncoding]
經(jīng)過(guò)轉(zhuǎn)換編碼之后,在屏幕上顯示的打印內(nèi)容如下:
parse xml succeed
aChild value = STATUS OK
aChild value = card
TiXmlNode::ELEMENT name = title, attr value = 百度一下,你就知道
aChild value = p
aChild value = img
TiXmlNode::ELEMENT name = src, attr value = /r/wise/wapsearchindex/logoindexsmall.gif
TiXmlNode::ELEMENT name = alt, attr value = 百度
aChild value = br
aChild value = input
TiXmlNode::ELEMENT name = name, attr value = word
TiXmlNode::ELEMENT name = emptyok, attr value = true
aChild value = br
aChild value = anchor
aChild value = 搜網(wǎng)頁(yè)
TiXmlNode::TEXT Value = 搜網(wǎng)頁(yè)
接下來(lái)的任務(wù)就是渲染這些解析出來(lái)的tag并顯示在界面上了,本篇里筆者重點(diǎn)講述如果搭建一個(gè)可擴(kuò)展的、健壯的界面架構(gòu)。
在所有平臺(tái)的界面架構(gòu)中,筆者一直推崇MVC,MVC的著重點(diǎn)在于把界面顯示和數(shù)據(jù)處理分離開(kāi)來(lái)以提供可擴(kuò)展的界面架構(gòu)平臺(tái)。基于這個(gè)思想,筆者建立了如下的架構(gòu)圖:

圖1.Tag界面架構(gòu)圖
在筆者的上篇文章《自己動(dòng)手寫(xiě)iPhone wap瀏覽器之BSD Socket引擎篇》中已經(jīng)成功解析出來(lái)了wml頁(yè)面中的tag,如果讀者仔細(xì)的話可能會(huì)看到里面中文的tag顯示為亂碼,這是因?yàn)樵趇Phone上默認(rèn)的中文編碼格式是UTF-8,而通過(guò)BSD Socket請(qǐng)求過(guò)來(lái)的是ASCII碼,所以需要通過(guò)轉(zhuǎn)換為UTF-8格式,如下:
[[NSString alloc] initWithBytes:aChild-》Value() length:strlen(aChild-》Value()) encoding:NSUTF8StringEncoding]
經(jīng)過(guò)轉(zhuǎn)換編碼之后,在屏幕上顯示的打印內(nèi)容如下:
parse xml succeed
aChild value = STATUS OK
aChild value = card
TiXmlNode::ELEMENT name = title, attr value = 百度一下,你就知道
aChild value = p
aChild value = img
TiXmlNode::ELEMENT name = src, attr value = /r/wise/wapsearchindex/logoindexsmall.gif
TiXmlNode::ELEMENT name = alt, attr value = 百度
aChild value = br
aChild value = input
TiXmlNode::ELEMENT name = name, attr value = word
TiXmlNode::ELEMENT name = emptyok, attr value = true
aChild value = br
aChild value = anchor
aChild value = 搜網(wǎng)頁(yè)
TiXmlNode::TEXT Value = 搜網(wǎng)頁(yè)
接下來(lái)的任務(wù)就是渲染這些解析出來(lái)的tag并顯示在界面上了,本篇里筆者重點(diǎn)講述如果搭建一個(gè)可擴(kuò)展的、健壯的界面架構(gòu)。
在所有平臺(tái)的界面架構(gòu)中,筆者一直推崇MVC,MVC的著重點(diǎn)在于把界面顯示和數(shù)據(jù)處理分離開(kāi)來(lái)以提供可擴(kuò)展的界面架構(gòu)平臺(tái)?;谶@個(gè)思想,筆者建立了如下的架構(gòu)圖:

圖1.Tag界面架構(gòu)圖
在Xml模塊處理完xml數(shù)據(jù)并提取出tag后,交給CXmlControl進(jìn)行處理,CXmlControl在這里充當(dāng)Control的角色,它負(fù)責(zé)在處理完tag(標(biāo)簽)后生成相應(yīng)的消息以顯示在界面上。
其中CXmlControl繼承自UIView類(lèi),它負(fù)責(zé)顯示界面并響應(yīng)用戶(hù)的按鍵消息,而具體的邏輯處理則是在CXmlControlImpl類(lèi)中進(jìn)行的,CXmlControlImpl這個(gè)類(lèi)負(fù)責(zé)管理生成的tag(標(biāo)簽)以及tag(標(biāo)簽)的界面Layout(布局),如下:
@class CXmlControlImpl;
@interface CXmlControl : UIView {
@public
CXmlControlImpl* iImpl;
}
-(void) addElements:(CXmlElementImpl*)iElemntAdded;
-(CXmlElement*) InsertContent:(CXmlElement*)aTarget aPosition:(NSInteger)aPosition aSource:(const NSString*)aSource aFlags:(NSInteger)aFlags;
-(CXmlElement*) AppendContent:(const NSString*)aSource aFlags:(NSInteger)aFlags;
-(void) Refresh;
-(void) RefreshAndDraw;
-(void) ClearContent;
-(void) RemoveElement:(CXmlElement*)aElement;
-(CXmlElement*) Element:(const NSString*)aId aIndex:(NSInteger)aIndex;
-(CXmlElement*) ElementByTag:(const NSString*)aTagName aIndex:(NSInteger)aIndex;
-(CXmlElement*) FocusedElement;
-(void) SetFocusTo:(CXmlElement*)aElement;
-(void) ScrollToView:(CXmlElement*)aElement;
-(CXmlElement*) Body;
-(void) SetEventObserver:(id《MXmlCtlEventObserver》)aObserver;
-(CXmlElementImpl*) Impl;
-(CGContextRef) SystemGc;
-(void) Draw:(const CGRect)aRect;
-(CWritableBitmap*) OffScreenBitmap;
-(void) SetOffScreenBitmap:(CWritableBitmap*)aBitmap;
-(void) DrawOffscreen;
-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
@end
Tag在中國(guó)并沒(méi)有統(tǒng)一的中文名稱(chēng),有的稱(chēng)之為“分類(lèi)”,也有的稱(chēng)之為“開(kāi)放分類(lèi)”或“大眾分類(lèi)”,還有的稱(chēng)之為“標(biāo)簽”。Tag(標(biāo)簽)是一種更為靈活、有趣的日志分類(lèi)方式,可以為每篇日志添加一個(gè)或多個(gè)Tag(標(biāo)簽),然后可以看到BlogBus上所有和您使用了相同Tag的日志,并且由此和其他用戶(hù)產(chǎn)生更多的聯(lián)系和溝通。
Tag(標(biāo)簽)類(lèi)的基類(lèi)為CXmlElement,它抽象了標(biāo)簽的基本屬性和操作,在每一個(gè)派生自此基類(lèi)的tag(標(biāo)簽)類(lèi)如CXmlTextElement、CXmlImgElement中都維護(hù)一個(gè)全局的布局類(lèi)CHcMeasureStatus,每一個(gè)tag(標(biāo)簽)類(lèi)都負(fù)責(zé)自己的布局和自己的繪制操作,完成布局操作和繪制操作后為改變CHcMearuseStatus的狀態(tài)和屬性并傳遞給CXmlControl類(lèi)。
版權(quán)與免責(zé)聲明
凡本網(wǎng)注明“出處:維庫(kù)電子市場(chǎng)網(wǎng)”的所有作品,版權(quán)均屬于維庫(kù)電子市場(chǎng)網(wǎng),轉(zhuǎn)載請(qǐng)必須注明維庫(kù)電子市場(chǎng)網(wǎng),http://www.hbjingang.com,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類(lèi)作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。
如涉及作品內(nèi)容、版權(quán)等問(wèn)題,請(qǐng)?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- 數(shù)字電源控制與傳統(tǒng)模擬控制的深度對(duì)比2026/2/2 11:06:56
- 模擬信號(hào)調(diào)理電路技術(shù)設(shè)計(jì)與選型運(yùn)維指南2025/12/30 10:08:16
- 運(yùn)算放大器壓擺率的核心要點(diǎn)2025/9/5 16:27:55
- 深度剖析放大器穩(wěn)定系數(shù) K 與 Mu 的差異2025/9/2 16:44:05
- 什么是運(yùn)算放大器失調(diào)電流2025/9/1 17:01:22
- 編碼器的工作原理及作用1
- 超強(qiáng)整理!PCB設(shè)計(jì)之電流與線寬的關(guān)系2
- 三星(SAMSUNG)貼片電容規(guī)格對(duì)照表3
- 電腦藍(lán)屏代碼大全4
- 國(guó)標(biāo)委發(fā)布《電動(dòng)汽車(chē)安全要求第3部分:人員觸電防護(hù)》第1號(hào)修改單5
- 通俗易懂談上拉電阻與下拉電阻6
- 繼電器的工作原理以及驅(qū)動(dòng)電路7
- 電容單位8
- 跟我學(xué)51單片機(jī)(三):?jiǎn)纹瑱C(jī)串口通信實(shí)例9
- 一種三極管開(kāi)關(guān)電路設(shè)計(jì)10
- 高速PCB信號(hào)完整性(SI)設(shè)計(jì)核心實(shí)操規(guī)范
- 鎖相環(huán)(PLL)中的環(huán)路濾波器:參數(shù)計(jì)算與穩(wěn)定性分析
- MOSFET反向恢復(fù)特性對(duì)系統(tǒng)的影響
- 電源IC在惡劣環(huán)境中的防護(hù)設(shè)計(jì)
- 連接器耐腐蝕性能測(cè)試方法
- PCB電磁兼容(EMC)設(shè)計(jì)與干擾抑制核心實(shí)操規(guī)范
- 用于相位噪聲測(cè)量的低通濾波器設(shè)計(jì)與本振凈化技術(shù)
- MOSFET在高頻開(kāi)關(guān)中的EMI問(wèn)題
- 電源IC在便攜式設(shè)備中的設(shè)計(jì)要點(diǎn)
- 連接器結(jié)構(gòu)設(shè)計(jì)常見(jiàn)問(wèn)題分析









