GeekBand iOS應(yīng)用開發(fā)實(shí)戰(zhàn)學(xué)習(xí)筆記(第一周)

第一天視頻課程

導(dǎo)讀

介紹了iOS學(xué)習(xí)的官方資源和第三方社區(qū),安裝Xcode,使用Apple官方的文檔庫(Xcode打開后在Window菜單下的Documentation and API Reference),默認(rèn)情況下文檔不是很齊全,可以在Xcode菜單下的Preferences里的Downloads選項(xiàng)下載到更齊全的文檔。

蘋果開發(fā)者中心網(wǎng)址:http://developer.apple.com

蘋果開元資源的網(wǎng)址:http://opensource.apple.com

蘋果開發(fā)者論壇網(wǎng)址:http://forums.developer.apple.com

第三方社區(qū)

stackoverflow、cocoachina、ourcoders、 v2ex 、github(搜a(bǔ)wesome ios 會(huì)有很多有用的代碼)

課程目標(biāo)

課程主要分為兩部分,第一部分是入門,主要是以iOS界面制作為主。第二部分是進(jìn)階,理解iOS的應(yīng)用框架,工程實(shí)踐,具備從事iOS應(yīng)用開發(fā)工作的基礎(chǔ),具備自主學(xué)習(xí)的基礎(chǔ)。

學(xué)習(xí)要求

認(rèn)真看視頻,在不看視頻時(shí)整理筆記,演示所有例子。完成課后練習(xí)。每天至少學(xué)習(xí)2個(gè)小時(shí)。

參考書 http://www.oreilly.com/pub/au/249

iOS的總綱:App Programming Guide for 等學(xué)完該課程后再看,可以大大增強(qiáng)iOS開發(fā)的能力。

第二天視頻課程

hello iOS

使用Single View Application,勾選Include Unit Test和Ui Test。勾選Git repository。

Xcode界面的圖示

Xcode界面圖

在interface builder上創(chuàng)建一個(gè)Label,將顯示文字改成“Hello, World!”

嘗試在各種模擬器和真機(jī)上運(yùn)行這個(gè)文件。本節(jié)課主要是動(dòng)手熟悉Xcode界面,和嘗試運(yùn)行這個(gè)簡單的程序。

點(diǎn)擊Main.storyboard在編輯窗口會(huì)出現(xiàn)顯示界編輯器(Interface Builder),可以用來編輯軟件的顯示界面。

從右邊的libraries區(qū)域拖一個(gè)label到Interface Builder的View Controller中。在label的inspectors區(qū)域?qū)ext屬性改成“Hello World”。第一個(gè)iOS程序就完成了

App基本概念

和C語言一樣也是從main函數(shù)進(jìn)入,main函數(shù)調(diào)用UIApplicationMain函數(shù),再由UIApplicationMain函數(shù)的最后一個(gè)參數(shù)傳入AppDelegate類。

//int main(int argc, char* argv[]){

????? @autoreleasepool{

??????????? return UIApplicationMain(argc, argv , nil, NSStringFromClass([AppDelegate class]));

????? }?

}?

iOS App的運(yùn)行環(huán)境是Sandbox(安全環(huán)境), 運(yùn)行期目錄結(jié)構(gòu)可以通過調(diào)用NSHomeDirectory()函數(shù)來得到。

每個(gè)iOS App都是一個(gè)目錄文件(Bundle),帶有:Info.plist的目錄。通過NSBundle類可以讀取目錄文件中的信息。resource bundle和framework都可以嵌在mainBundle里。

第三天視頻課程

Button

界面與代碼分離

可以只用代碼來描繪見面及響應(yīng)用戶操作,缺點(diǎn)是不直觀,調(diào)整麻煩。iOS編程使用的是界面與代碼分離解決的方案,用Interface Builder來編輯界面,保存到xib(xml版的nib)文件,用代碼來更新界面、響應(yīng)用戶操作,保存在.m文件里。

使用界面代碼分離解決方案,我們需要關(guān)注兩個(gè)方面:1、界面操作怎么指定響應(yīng)代碼。2、代碼怎么引用界面元素。

在開發(fā)時(shí),代碼描述的是類,界面描述的是模板(xib)。等程序運(yùn)行時(shí),代碼的類形成類實(shí)例,界面形成的是界面對象。

Outlet

為了讓代碼能引用nib中的對象,需要代碼里有一個(gè)變量來引用界面對象(該變量會(huì)加上修飾<IBOutlet>),在界面創(chuàng)建后,給這個(gè)變量賦值(和一個(gè)nib object建立一個(gè)connection關(guān)系),這個(gè)變量就成了一個(gè)界面對象的referencing outlet。這個(gè)過程最好能自動(dòng)完成。

Outlet Connection

存在xib里的是界面模板,運(yùn)行時(shí),類實(shí)例的代碼會(huì)觸發(fā)界面實(shí)例化。最終調(diào)用[UINib instantiateWithOwner:options:];再根據(jù)模板實(shí)例化其中的對象[owner-setValue:uiObj forKey:outlet.property]

Action Connection

界面事件:Interface Builder, Connection Inspector

響應(yīng)代碼:IBAction標(biāo)記的方法

關(guān)聯(lián):界面對象.事件=>類實(shí)例.方法

在有關(guān)聯(lián)的類實(shí)例方法返回值設(shè)為IBAction讓編譯器知道這是一個(gè)響應(yīng)事件的方法。//-(IBAction)greeting:(id)sender{}

Demo

在Interface Builder里制作界面(拖動(dòng)所需的界面對象到Interface Builder界面里),給按鈕添加響應(yīng)代碼(將Interface Builder界面里的對象按住control鍵向ViewController.m文件中聲明處拖動(dòng),將自動(dòng)生成屬性聲明代碼),在響應(yīng)代碼里訪問其他界面元素(將Interface Builder界面里的對象按住control鍵向ViewController.m文件中實(shí)現(xiàn)處拖動(dòng),將自動(dòng)生成實(shí)現(xiàn)代碼的框架,后續(xù)再按實(shí)際需求補(bǔ)全代碼)。

UIButton樣式

UIButton的樣式

代碼創(chuàng)建UIButton

創(chuàng)建

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];

定制

[btn setBackgroundImage:[UIImage imageNamed:@"okbtn"]forState:UIControlStateNormal];

[btn setTitle:@"OK"forState:UIControlStateNormal];

[btn setTitleColor:[UIColor redColor]forState:UIControlStateNormal];//將顯示的字設(shè)置為紅色

添加響應(yīng)

[btn addTarget:self action:@selector(greeting:)forControlEvents:UIControlEventTouchUpInside]; //按鈕點(diǎn)擊后形成一個(gè)響應(yīng)事件,調(diào)用了greeting方法

event mask:UIControlEventTouchUpInside | UIControlEventTouchUpOutside

第四天視頻課程

Image

Assert Catalog

Assert Catalog是一個(gè)圖片管理器,針對不同的iOS設(shè)備,可視化管理不同的分辨率。在Xcode里面使用圖片,首先要將需要使用的圖片加到項(xiàng)目里面,定義圖片為項(xiàng)目里面的一個(gè)資源,如果圖片有邊框的,還要做圖片的邊框切片定義,好讓同一張圖片應(yīng)對不同分辨路的縮放。

打開Xcode后選擇Assets.xcassets用來編輯圖片。在Interface Builder里面拖入一個(gè)Image View,在圖片屬性里嘗試各種功能對圖片的影響。?

Assets.xcassets的編輯區(qū)里有Appicon,這個(gè)是程序顯示在設(shè)備上的圖標(biāo),由于iOS設(shè)備現(xiàn)在的不斷增加,有不同的分辨率,我們可以根據(jù)不同的分辨率配屬不同大小的圖片。

矢量圖:矢量圖是根據(jù)幾何特性來繪制圖形,矢量可以是一個(gè)點(diǎn)或一條線,矢量圖只能靠軟件生成,文件占用內(nèi)在空間較小。最大的特點(diǎn)是可以無限放大,不變色、不模糊。

UIImageView

用UIImageView在Interface Builder顯示圖片,UIImageView有許多不同的屬性。Mode屬性對應(yīng)UIImageView中圖片的顯示方式,有適應(yīng)邊框填滿(Scale To Fill)、保持橫豎比例縮放(Aspect Fit)、保持橫豎比例填滿(Aspect Fill)等。

.image屬性是指關(guān)聯(lián)到UIImageView的圖片屬性。

圖片屬性可以根據(jù)不同大小或配置的設(shè)備指定不同的圖片,圖片的Render屬性是指圖片出現(xiàn)在ToolBar上時(shí)的表現(xiàn),有默認(rèn)、原始圖片和模板圖片三種屬性選項(xiàng)。

有邊框的圖片可以進(jìn)行裁剪設(shè)置,保證圖片縮放時(shí)邊框比例保持不變。使用圖片的Silcing屬性進(jìn)行編輯,也可以在圖片編輯區(qū)點(diǎn)擊右下角的Show Slicing設(shè)置。(注:縮放中心點(diǎn)最好和左上角的邊框點(diǎn)接近,拖動(dòng)時(shí)圖片不容易超出邊框)

圖片在IB里選擇意味著圖片打包在mainBundle里,系統(tǒng)會(huì)自動(dòng)緩存。

加載App bundle里的圖片

image = [UIImage imageNamed:@"mypic"]; //自動(dòng)在App bundle里尋找名字為mypic的問題件。

image = [UIImage imageNamed:@"mypic" inBundle:nil compatibleWithTraitCollection:nil]; //如果是自己打包的resource bundle就用以上方法。

NSURL *url = [[NSBundle mainBundle] URLForResource:@"mypic"withExitension:@"png"];//得到mypic.png文件的文件路徑

UIImage *image = [UIImage imageWithContentsOfFile:url.path]; //通過以上的文件路徑創(chuàng)建圖片實(shí)例,這種方法比較好,不需要提前緩存

加載文件里的圖片

UIImage *image = [UIImage imageWithContentsOfFile:path]; //通過可以訪問到的文件加載圖片。

UIImage *image = [UIImage imageWithData:data]; //通過data來得到對象。

加載動(dòng)畫

將一段連續(xù)的圖片加載到App bundle中,命名由相同名字+數(shù)字的方法。

這一課主要是實(shí)踐練習(xí),熟悉圖片在Interface Builder里面的各種屬性和用法。在ViewController.h 文件中聲明一個(gè)UIImageView屬性:@property (weak, nonatomic) IBOutlet UIImageView *imageView;,并且在-(void)viewDidLoad方法實(shí)現(xiàn)中加入圖片加載代碼:

UIImage *image = [UIImage animatedImageNamed:@"動(dòng)畫"duration:1.0]; //將名字為“動(dòng)畫”的圖片打包成一個(gè)動(dòng)畫

self.imageView.image = image; //把圖片“動(dòng)畫”集加載到imageView屬性窗口中

第五天視頻課程

第一個(gè)App

一個(gè)小游戲,猜城市。主要玩法:顯示一張城市的圖片,用戶輸入城市的名字,猜對得分。

猜城市游戲界面

在制作軟件之前除了基本的要求描述外,還需要做進(jìn)一步的需求分析。大型軟件還需要做多次的用戶需求訪問,軟件架構(gòu)分析及設(shè)計(jì),開發(fā)組員討論交流等必要工作來確保開發(fā)軟件的準(zhǔn)確性和高效性。上述的游戲還有不少細(xì)節(jié)我們需要了解。例如:城市圖片的展示順序,是順序展示還是隨機(jī)展示。 圖片的來源,是本地圖片還是從服務(wù)器下載。輸入框中是需要輸入中文還是英文。如果輸錯(cuò)可否重試,可以重試幾次。游戲計(jì)分系統(tǒng)怎樣設(shè)置。游戲結(jié)束觸發(fā)條件等。要在需求收集盡可能完善的情況下再進(jìn)行分析、設(shè)計(jì)。

結(jié)合需求的分析設(shè)計(jì)
程序設(shè)計(jì)流程圖

根據(jù)需求分析設(shè)計(jì),來設(shè)計(jì)整個(gè)程序的流程,設(shè)計(jì)時(shí)需要考慮一定的可擴(kuò)展性 、跟合理性。通過程序流程設(shè)計(jì)再設(shè)計(jì)出合理的代碼結(jié)構(gòu)。

示例代碼結(jié)構(gòu)圖

改進(jìn)鍵盤的顯示問題

?方案1:點(diǎn)擊鍵盤外的地方收起鍵盤,首先在storyboard,點(diǎn)擊背景View,將它的Custom Class設(shè)置為UIControl再將UIControl的Touch Down響應(yīng)事件關(guān)聯(lián)到一個(gè)重新聚焦方法。?[UITextField resignFirstResponder];??

方案2:輸入完成后點(diǎn)擊return關(guān)閉鍵盤, 選中一個(gè)UITextField控件將Did End on Exit事件響應(yīng)關(guān)聯(lián)到一個(gè)重新聚焦方法。?[sender resignFirstResponder];??

第六天視頻課程

演示了猜城市游戲的全部代碼,講解了代碼的設(shè)計(jì)結(jié)構(gòu)和注意事項(xiàng)。 代碼在實(shí)現(xiàn)功能的前提下需要有條理的分類,保證整個(gè)程序的代碼結(jié)構(gòu)合理性??刂平缑嫠⑿碌腣iewController不應(yīng)該放入業(yè)務(wù)邏輯,只負(fù)責(zé)從頁面上拿信息和更新頁面的狀態(tài)。 應(yīng)該另外新建一個(gè)Game類來描述游戲的邏輯。

#pragma mark? 預(yù)處理器文法用來方便查找和導(dǎo)航代碼用的,在代碼編輯器的導(dǎo)航欄插入我們想要的標(biāo)題。

id和instancetype:他們都可以作為方法的返回類型,instancetype可以返回和方法所在類型相同的對象,id只能返回未知類型的對象。instancetype只能作為返回值,不能像id那樣作為參數(shù)。

學(xué)會(huì)寫單元測試,Unit Test可以分塊測試,在編程的過程中只需要專注當(dāng)前區(qū)塊的編寫就可以了。Xcode還有界面自動(dòng)化測試(UI Test),可以幫助我們自動(dòng)測試軟件。

為了做測試可能會(huì)需要訪問一些內(nèi)部狀態(tài),可以用一個(gè)類別吧內(nèi)部狀態(tài)暴露出來。頭文件放在測試文件夾里只供測試使用。這樣既保證了代碼的安全,又可以順利的測試到內(nèi)部狀態(tài)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 蘋果開發(fā)者中心網(wǎng)址:http://developer.apple.com蘋果開元資源的網(wǎng)址:http://open...
    44e46f384a16閱讀 227評論 0 0
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,654評論 4 61
  • 這些年一直瞎忙活,不知覺得就到了今天。
    這些年一直瞎忙活閱讀 215評論 0 0
  • 讀《蠅王》有感 文/陶蓉 “惡”出于人猶如“蜜”產(chǎn)于蜂?!边@是英國著名小說家、諾貝爾文學(xué)獎(jiǎng)得主威廉.戈?duì)柖≌f的。在...
    陶蓉子閱讀 255評論 6 5
  • 文/亦夢 最近好多人都在淡論追星的話題,看到大家議論的興趣盎然,我也受到感染,想一想成年后對追星并不癡迷,但小時(shí)候...
    亦夢_7e31閱讀 865評論 0 4

友情鏈接更多精彩內(nèi)容