iOS嗽元,如何模仿一個(gè)App

前言

作為一個(gè)IOS程序員敛纲,閑的時(shí)候也想自己做一個(gè)app練練手,又苦于沒有UI設(shè)計(jì)剂癌,也沒有好的idea淤翔,所以只能先模仿別人的App了,但是也會(huì)遇到以下問題
**
①不知道怎么入手佩谷?怎么設(shè)計(jì)
**
**
②app中的素材旁壮、圖標(biāo)要自己找嗎、沒有UI妹子給你切圖怎么辦谐檀,
**
**
③沒有數(shù)據(jù)怎么辦抡谐?假數(shù)據(jù)也不會(huì)做怎么辦
**
**
④編寫程序中該注意些什么
**

** 以下就從上面的三點(diǎn)開始介紹**

Tips:一下均為我個(gè)人的見解,有疑問或者建議請(qǐng)告訴我
以我的高仿項(xiàng)目半糖App為例

**
**

一桐猬、不知道怎么入手麦撵?怎么設(shè)計(jì)

首先,整體瀏覽一下官方的半糖App,

![ ![ ![IMG_0095.PNG](http://upload-images.jianshu.io/upload_images/1299512-202a765f086ca351.PNG?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)](http://upload-images.jianshu.io/upload_images/1299512-fc3a2b9ccf1b9894.PNG?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)](http://upload-images.jianshu.io/upload_images/1299512-ca997e779c4318c4.PNG?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

上面幾張圖片分別對(duì)應(yīng)的是 首頁溃肪、廣場(chǎng)免胃、消息中心、個(gè)人中心乍惊,杜秸,rootViewController是 UITabBarController,以首頁為例

tmp696dc36e.png

Tips:

  • 1 整體上分為 兩大部分 headerView 和UICollectionView
  • 2 每次點(diǎn)擊標(biāo)簽 "最新" "熱門"等,collectionView 都會(huì)滾動(dòng)到對(duì)應(yīng)標(biāo)簽的tableView中润绎,
    collectionView結(jié)構(gòu)上來看就是這樣:
tmp59d229d4.png

也就是 tableview 添加到collectionViewCell.contentView中顯示出來

headerView的結(jié)構(gòu)如下

tmp5b876e7d.png

這一部分組合的自由度較大撬碟,然后每個(gè)按鈕都設(shè)置不同tag,然后所有按鈕添加相同的方法莉撇,比如

- (void)clickCenterWithTag:(UIButton *)sender{
  if(sender.tag == 按鈕tag值){
    }
} 

當(dāng)然也可以設(shè)置一個(gè)block回調(diào)呢蛤,參數(shù)為按鈕tag值,在ViewController中 給block賦值的時(shí)候棍郎,比如

headerView.clickCenterBlock = ^(Int tag){
  //在這里進(jìn)行判斷其障,tag等于多少,進(jìn)行什么操作
}

還有通知涂佃、delegate等方法都可以励翼,就不一一細(xì)說了。辜荠。

之后的頁面沒有太過于復(fù)雜的結(jié)構(gòu)汽抚,對(duì)照首頁,也可以一一將View剝離出來

**
**

二伯病、app中的素材造烁、圖標(biāo)要自己找嗎、沒有UI妹子給你切圖怎么辦

① app中好多按鈕的圖標(biāo)、背景圖片哪里找

大招:電腦上在iTunes中下載你要模仿的app惭蟋,找到它的存儲(chǔ)目錄(具體方法百度苗桂。)

tmp09a816eb.png

接著,把 后綴.ipa 改為.zip ,然后把 zip文件打開

tmp062cdaed.png

顯示包內(nèi)容后告组,可以看到大部分你所需要的素材圖片了

② 切圖標(biāo)注問題(切圖我就不說了煤伟,我只會(huì)截圖,ps什么的都不會(huì))

手機(jī)安裝你要模仿的app惹谐,然后截屏持偏,把圖片發(fā)到電腦上,然后安裝Mark Man工具氨肌,

tmp1e090874.png

鸿秆,然后將圖片拖到Mark Man中,

tmp1be40fe1.png

然后就可以隨心所欲地標(biāo)注怎囚,取色等等
**
**

三卿叽、沒有數(shù)據(jù)怎么辦?該怎么去抓包

沒有數(shù)據(jù)有兩個(gè)方法:
① 做假數(shù)據(jù)恳守,數(shù)據(jù)寫死考婴,這個(gè)不是很現(xiàn)實(shí),因?yàn)槟阋7碌腶pp肯定有圖片催烘,這么做假數(shù)據(jù)得到猴年馬月沥阱。。伊群。
② 抓包考杉,其實(shí)過程不是很繁瑣
下面講一下抓包的過程:

* 1 工具

tmp4f89f5bc.png

Charles 百度上很多可以下載,試用版即可舰始,不需要破解

使用過程:

①將手機(jī)和電腦連上同一個(gè)wifi崇棠,打開抓包工具
tmp1be62615.png
②打開半糖app
tmp11e3e193.png

抓到半糖app的數(shù)據(jù),點(diǎn)進(jìn)去如下:

tmp6226dd3d.png

這就是半糖app的數(shù)據(jù)丸卷,如果沒有你想要的枕稀,別急,你先瀏覽你要抓數(shù)據(jù)的頁面谜嫉,這時(shí)候會(huì)發(fā)現(xiàn)這個(gè)目錄有新的數(shù)據(jù)返回萎坷,點(diǎn)進(jìn)去可以看到


tmp7a92a51b.png

點(diǎn)擊 JavaScript按鈕可以看到原始的json數(shù)據(jù)

tmp7e5e4b14.png


將json數(shù)據(jù) 拷貝到文件中存儲(chǔ)起來沐兰,這就是本地?cái)?shù)據(jù)

②下面說一下 如何解析數(shù)據(jù)哆档,以swift為例,OC類似參考一下僧鲁。
比如我們將剛剛的json存為 test.rtf(別問我為什么是rtf虐呻,因?yàn)閙ac上記事本只有這么一個(gè),當(dāng)然你也可以存為txt格式等),然后把test.rtf拖到項(xiàng)目中來

tmp4554b12a.png

上代碼:
Tips: 在這里寞秃,我們首先要明白一點(diǎn)斟叼,字典即為對(duì)象的一種表現(xiàn)形式。
先把模型寫好:

class TopicModel: NSObject {
  //先寫兩個(gè)屬性
  var id: String?
  var title: String?

  //從json中讀取數(shù)據(jù) 并給model賦值(以下為Swift代碼春寿,OC請(qǐng)參考)朗涩,封裝成類方法更方便
  class fun readDataFromJSON() -> TopicModel{
    //創(chuàng)建返回的model 
    let topicModel = TopicModel()
    //讀取JSON文件
    let path = NSBundle.mainBundle().pathForResource("test", ofType: "rtf")
    let nsData = NSData(contentsOfFile: path!)
     /// json整體轉(zhuǎn)換為字典
     let Dict = ( try! NSJSONSerialization.JSONObjectWithData(nsData!, options:.AllowFragments) ) as! NSDictionary

  //看上面的圖片中,你要抓得數(shù)據(jù)處于 四層目錄下绑改,一步一步來

  //先把 "data"從json文件中 剝離出來
    let Data = Dict.objectForKey("data") as! NSDictionary
  
  //從Data 中把 "topic"數(shù)組剝離出來,由圖片可以看到 topic是一個(gè)數(shù)組 谢床,存了好多個(gè)相同類型的數(shù)據(jù)
    let topicData = Data.objectForKey("topic") as! NSArray

  //topic數(shù)據(jù)已經(jīng)獲取,我們先將第一個(gè)元素剝離出來厘线,
  // 定義一個(gè)object對(duì)象,并轉(zhuǎn)換為字典類型
  let obj = topicData[0] as! NSDictionary
    
// 現(xiàn)在將obj字典的值 賦給 我們定義的topicModel
  topicModel.id = obj.objectForKey("id") as? String
  topicModel.title = obj.objectForKey("title") as? String

    //end: 到現(xiàn)在 給model賦值就可以了识腿,返回model即可

  return topicModel
  }
}

在需要用到model的地方,直接調(diào)用 Topic.readFromJSON 就會(huì)返回你要的model

**現(xiàn)在看來造壮,抓包并沒有我們想象中的繁瑣 **

四渡讼、編寫程序應(yīng)該注意什么

Tips: 這一部分只是參照我的經(jīng)驗(yàn)來看,如有建議或者意見請(qǐng)與我交流耳璧,望不吝賜教

① 代碼盡量要復(fù)用成箫,封裝控件前看看是否幾個(gè)控件相似,可以放到一起旨枯,比如:

這個(gè)是 廣場(chǎng)中的標(biāo)簽欄


tmp154d38d0.png

這個(gè)是個(gè)人中心的標(biāo)簽欄

tmp05e7ce45.png

這個(gè)是清單詳情的標(biāo)簽欄

tmp69f75d0d.png

三個(gè)控件有不相同的地方蹬昌,比如標(biāo)簽中的分割線,上面的邊框攀隔,字體大小皂贩,但是,控件中的所有邏輯都一樣竞慢,這就夠了先紫,可以寫一個(gè)控件,加一些參數(shù)筹煮,比如說 是否顯示邊框遮精,frame大小,中間是否有分割線败潦,這樣做的話本冲,封裝一個(gè)控件就可以滿足 整個(gè)app中類似的控件

② 方法,或者稱之為函數(shù)劫扒,封裝也盡量放到一起檬洞,比如

app中有很多對(duì)圖片進(jìn)行的操作,諸如 放大沟饥,裁剪添怔,加邊框湾戳,可以這樣:

//將 這些方法都封裝為 類方法 ,OC中也就是 "+"方法
class ImageOperationCenter: NSObejct {

    class func ScaleToFize(image: UIImage) -> UIImage {
      //對(duì)圖片進(jìn)行裁剪處理广料,并返回
    }
    class func MakeScale(image: UIImage,scale: CGFloat) -> UIImage {
      //對(duì)圖片進(jìn)行放大處理砾脑,并返回
    }
}

Tips:如上,將對(duì)圖片的處理方法艾杏,都放在 ImageOperationCenter 這個(gè)類中韧衣,調(diào)用的時(shí)候只需要像這樣 let image = ImageOperationCenter.MakeScale(源照片,放大倍數(shù))即可购桑,用著也方便

③ 與第一點(diǎn)類似畅铭,很多相似的控件,Cell盡量復(fù)用

諸如

tmp69f75d0d.png

半糖精選的cell 與 用戶推薦的cell 類似勃蜘,但是有不同的地方硕噩,而且用到的model也不同,這樣我們就要重寫兩種cell嗎缭贡,不需要榴徐,只要 "用戶推薦"的cell 繼承 "半糖精選" 的cell,重寫里面的方法即可匀归,省了好多功夫坑资,所以寫程序一定要在不損失質(zhì)量的前提下怎么省事怎么來

再來看一個(gè)例子。
tmp63efa8a5.png

這個(gè)通常會(huì)將它作為collectionView處理穆端,其實(shí)袱贮,只有8個(gè)button的情況下,將button封裝為一個(gè)View即可体啰,這樣攒巍,ViewController中會(huì)少了一堆代理方法和一堆初始化collectionView方法
這個(gè)也就因人而異吧,要靈活運(yùn)用哦~

⑤ 其實(shí)看到一個(gè)頁面要先把整個(gè)頁面的結(jié)構(gòu)確定好荒勇,不要寫了一半才發(fā)現(xiàn)這樣寫好像太麻煩柒莉,或者這樣寫寫不出來

我在我的高仿半糖app中 首頁就遇到了這樣的問題,開始想著 用UIScrollView當(dāng)做容器沽翔,里面添加UITableView顯示內(nèi)容兢孝,這樣做未嘗不可,但是考慮到復(fù)用的問題仅偎,可以用三個(gè)tableView完成復(fù)用跨蟹,但是這樣做過于麻煩,所以后來就用collectionView當(dāng)做容器橘沥,將tableView 添加到collectionViewCell中顯示出來窗轩,這樣復(fù)用的問題就解決了

寫在后面的話

我的開發(fā)經(jīng)驗(yàn)也不多,上面完全是我在做項(xiàng)目中自己的感悟和體會(huì)座咆,有些可能會(huì)有問題痢艺,請(qǐng)參考即可

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末仓洼,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子堤舒,更是在濱河造成了極大的恐慌衬潦,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,640評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件植酥,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡弦牡,警方通過查閱死者的電腦和手機(jī)友驮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來驾锰,“玉大人卸留,你說我怎么就攤上這事⊥衷ィ” “怎么了耻瑟?”我有些...
    開封第一講書人閱讀 165,011評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)赏酥。 經(jīng)常有香客問我喳整,道長(zhǎng),這世上最難降的妖魔是什么裸扶? 我笑而不...
    開封第一講書人閱讀 58,755評(píng)論 1 294
  • 正文 為了忘掉前任框都,我火速辦了婚禮,結(jié)果婚禮上呵晨,老公的妹妹穿的比我還像新娘魏保。我一直安慰自己,他們只是感情好摸屠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,774評(píng)論 6 392
  • 文/花漫 我一把揭開白布谓罗。 她就那樣靜靜地躺著,像睡著了一般季二。 火紅的嫁衣襯著肌膚如雪檩咱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,610評(píng)論 1 305
  • 那天胯舷,我揣著相機(jī)與錄音税手,去河邊找鬼。 笑死需纳,一個(gè)胖子當(dāng)著我的面吹牛芦倒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播不翩,決...
    沈念sama閱讀 40,352評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼兵扬,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼麻裳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起器钟,我...
    開封第一講書人閱讀 39,257評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤津坑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后傲霸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體疆瑰,經(jīng)...
    沈念sama閱讀 45,717評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,894評(píng)論 3 336
  • 正文 我和宋清朗相戀三年昙啄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了穆役。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,021評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡梳凛,死狀恐怖耿币,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情韧拒,我是刑警寧澤淹接,帶...
    沈念sama閱讀 35,735評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站叛溢,受9級(jí)特大地震影響塑悼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜楷掉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,354評(píng)論 3 330
  • 文/蒙蒙 一拢肆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧靖诗,春花似錦郭怪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至促绵,卻和暖如春攒庵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背败晴。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工浓冒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人尖坤。 一個(gè)月前我還...
    沈念sama閱讀 48,224評(píng)論 3 371
  • 正文 我出身青樓稳懒,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親慢味。 傳聞我的和親對(duì)象是個(gè)殘疾皇子场梆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,974評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容