日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS_CNBlog项目开发 (基于博客园api开发) 上篇

發(fā)布時(shí)間:2024/1/17 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS_CNBlog项目开发 (基于博客园api开发) 上篇 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

按照慣例, 先上效果圖

?

前言

做這個(gè)項(xiàng)目是因?yàn)閯偤迷诠洳┛蛨@的時(shí)候看到一篇文章?博客園第三方客戶端-i博客園正式發(fā)布App Store, 這里就幫忙貼下鏈接吧.?

整個(gè)項(xiàng)目做下來大概做了半個(gè)月, 今天算是做出1.0版本, 已經(jīng)貼上github(https://github.com/samAroundGitHub/CNBlog), 歡迎各路人士指導(dǎo)交流啦.

項(xiàng)目介紹?

1. 工具和資料

  博客園官方open web api網(wǎng)址:(再次感謝桑果, 因?yàn)槲也粫襛pi...(╮(╯▽╰)╭))

  • http://wcf.open.cnblogs.com/news/help?(新聞)
  • http://wcf.open.cnblogs.com/blog/help?(博客)
  •   第三方框架 (這次主要想說不要用太多第三方, 所以為了開發(fā)效率只用了幾個(gè))

  • SDWebImage
  • MJRefresh
  • SVProgressHUD
  • ?

    2. UI設(shè)計(jì)

    這里就貼下我的一些UI杰作好了(^^)

    項(xiàng)目中用到的UI, 像appIcon, LaunchImage, 還有一些占位圖標(biāo)我是自己做的(Sketch), 然后有一部分是http://www.easyicon.net上的, 還有一部分是以前項(xiàng)目的圖標(biāo), 我也有從ituns下載app, 打開它的包想拿它的圖片, 竟然沒找到想要的那幾個(gè), 應(yīng)該是發(fā)網(wǎng)絡(luò)請求獲取的吧.

    不知道怎么獲取app圖片資源的, 這里推薦一個(gè)網(wǎng)址:iOS,如何模仿一個(gè)App

    開發(fā)難點(diǎn)

    1. 博客園api數(shù)據(jù)解析

    博客園返回的數(shù)據(jù)是xml, 所以我選擇用蘋果官方自帶的NSXMLParser進(jìn)行解析, 為此我特地寫了一個(gè)工具類(SMXMLParserTool), 這里介紹一下用法, 有需要的可以拖到你的項(xiàng)目自己就使用.

    .h文件

    + (instancetype)sm_toolWithURLString:(NSString *)urlString nodeName:(NSString *)nodeName completeHandler:(void (^)(NSArray *contentArray, NSError *error))completerHandler; - (instancetype)sm_initWithURLString:(NSString *)urlString nodeName:(NSString *)nodeName completeHandler:(void (^)(NSArray *contentArray, NSError *error))completerHandler;@property (nonatomic, readonly, strong) NSArray *contentArray; @property (nonatomic, strong) NSString *nodeName;

    使用的時(shí)候只需要調(diào)用類方法, [SMXMLParserTool sm_toolWithURLString:...], 需要傳入一個(gè)xml節(jié)點(diǎn)的名稱, 比如博客園的xml節(jié)點(diǎn)結(jié)構(gòu)如下的話,

    <doc><feed><title>博客園_48小時(shí)閱讀排行</title><id>d2e2f719-12cd-414e-ac2c-9d376c950c8a;id=...</id>// 刷新時(shí)間<updated></updated><entry> </entry><entry> </entry><entry> </entry></feed> </doc>// 博客信息 <entry> // 文章id<id></id>// 博客題目<title></title>// 文章概述<summary></summary>// 發(fā)布時(shí)間<published></published>// 獲取時(shí)間<updated></updated>// 發(fā)布人信息<author>// 姓名<name></name>// 博客首頁<uri></uri><avatar>// 頭像<http/></avatar></author><link></link>// 推薦人數(shù)<diggs></diggs>// 閱讀過的人數(shù)<views></views>// 評論數(shù)<comments></comments></entry>

    你只要傳入@"entry", 然后就會得到節(jié)點(diǎn)entry下以各子節(jié)點(diǎn)為key值為value的dictionary然后存入到contentArray, 在回調(diào)函數(shù)completeHandler中可以直接使用獲得的數(shù)據(jù)contentArray. 如果解析過程發(fā)生錯(cuò)誤, error信息會被打印到控制臺. ?

    ?

    2. 第二個(gè)難點(diǎn)還是博客園api的數(shù)據(jù)解析

    因?yàn)椴┛蛨@返回博客的文章格式是html格式的. 所以需要解析html語句.?這里我采用的方法是[UIWebView LoadHtmlString:..];

    然后會發(fā)現(xiàn)解析完的頁面圖片會超出顯示范圍, 這是需要用到?[webView stringByEvaluatingJavaScriptFromString:..] 用javaScript改變圖片大小

    // 設(shè)置圖片的寬高適應(yīng)屏幕[webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"var script = document.createElement('script');""script.type = 'text/javascript';""script.text = \"function ResizeImages() { ""var myImg,oldWidth,oldHeight;""var maxWidth=%f;"// 圖片寬度"for(i=0;i <document.images.length;i++){""myImg = document.images[i];""oldWidth = myImg.width;oldHeight = myImg.height;""var scale = oldWidth/oldHeight;""if(myImg.width > maxWidth){""myImg.width = maxWidth;myImg.height = maxWidth/scale;""}""}""}\";""document.getElementsByTagName('head')[0].appendChild(script);", kScreenW-20]];[webView stringByEvaluatingJavaScriptFromString:@"ResizeImages();"];

    ?這樣就可以把超過的圖片顯示到你要的范圍內(nèi)了.

    ?

    3. 第三個(gè)難點(diǎn)還是博客園api數(shù)據(jù)解析

    這次是為什么這樣說呢? 因?yàn)槿绻阋c(diǎn)擊webView下的圖片有響應(yīng), 還得再次用到剛剛的方法?[UIWebView LoadHtmlString:..];

    默認(rèn)的情況下點(diǎn)擊是不會觸發(fā)事件的, 所以要用javaScript讓圖片有onclick()方法, 然后改變document.loaction的值, 實(shí)現(xiàn)頁面跳轉(zhuǎn), 在UIWebView代理方法?- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType; 下捕捉事件進(jìn)行處理

    // 添加圖片的onclick方法NSString *setImageOnclickString = [NSString stringWithFormat:@"function setImageOnclick() {\var imgs = document.getElementsByTagName('img');\for(var i=0; i<imgs.length; i++) {\imgs[i].onclick = function(){\document.location = this.src;}}}"];[webView stringByEvaluatingJavaScriptFromString:setImageOnclickString];[webView stringByEvaluatingJavaScriptFromString:@"setImageOnclick()"];

    ?我處理的方法是用蘋果新的內(nèi)嵌SFSafariViewController實(shí)現(xiàn)跳轉(zhuǎn), 這樣的好處是直接可以在app內(nèi)享有safari自帶的功能, 比如保存圖片, 進(jìn)入閱讀模式等等, 而且還是在app內(nèi)沒有離開你的app. ?使用SFSafariViewController前需要?#import <SafariServices/SafariServices.h>

    ?4. 第四個(gè)難點(diǎn)依然是博客園api數(shù)據(jù)解析

    醉了, 是不是. 哈哈. 不過這次我說的難點(diǎn)是在邏輯上不是在技術(shù)上的. 獲取數(shù)據(jù)的數(shù)目上下拉的獲取多少數(shù)據(jù), 總共有多少數(shù)據(jù), 不一次性獲取數(shù)據(jù)的情況下每次獲取多少數(shù)據(jù)可以避免流量浪費(fèi), 反正是一系列邏輯上要解決的問題, 由于情況很多, 我就不貼代碼了, 有遇到問題再交流交流.

    5. tarBarHideWhenPush

    終于第五個(gè)難點(diǎn)不是api數(shù)據(jù)解析了, 但是其實(shí)tarBarHideWhenPush也不算難點(diǎn), 只是會經(jīng)常走彎路, 當(dāng)UITabBarViewController嵌套UINavgationController附加有UIViewController, 反正關(guān)系一復(fù)雜起來, 就會發(fā)現(xiàn)很多人問hidesBottomBarWhenPushed = YES為什么不管用, 我也百度過試過很多方法, 比如?

    self.hidesBottomBarWhenPushed = YES;[self.navigationController pushViewController:.. animated:YES];self.hidesBottomBarWhenPushed = NO;

    再比如, 在viewDidappear中才加入 self.hidesBottomBarWhenPushed = YES. 反正就是很多說法, 但是都不怎么有效..

    我獨(dú)門的解決方法是在你要隱藏tarBar的VC中調(diào)用

    // push后隱藏tabBar - (BOOL)hidesBottomBarWhenPushed {return YES; }

    ??

    轉(zhuǎn)載于:https://www.cnblogs.com/easyToCode/p/5274410.html

    總結(jié)

    以上是生活随笔為你收集整理的iOS_CNBlog项目开发 (基于博客园api开发) 上篇的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。