日韩欧美自拍在线观看-欧美精品在线看片一区二区-高清性视频一区二区播放-欧美日韩女优制服另类-国产精品久久久久久av蜜臀-成人在线黄色av网站-肥臀熟妇一区二区三区-亚洲视频在线播放老色-在线成人激情自拍视频

解析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)利。

廣告
OEM清單文件: OEM清單文件
*公司名:
*聯(lián)系人:
*手機(jī)號(hào)碼:
QQ:
有效期:

掃碼下載APP,
一鍵連接廣大的電子世界。

在線人工客服

買(mǎi)家服務(wù):
賣(mài)家服務(wù):
技術(shù)客服:

0571-85317607

網(wǎng)站技術(shù)支持

13606545031

客服在線時(shí)間周一至周五
9:00-17:30

關(guān)注官方微信號(hào),
第一時(shí)間獲取資訊。

建議反饋

聯(lián)系人:

聯(lián)系方式:

按住滑塊,拖拽到最右邊
>>
感謝您向阿庫(kù)提出的寶貴意見(jiàn),您的參與是維庫(kù)提升服務(wù)的動(dòng)力!意見(jiàn)一經(jīng)采納,將有感恩紅包奉上哦!