將您的iPhone以及iPad帶至另一個新水平!
您或許曾經在其他的App程式上見識過酷炫的功能以及技巧,但卻沒有時間真正去了解它們是如何完成的──但我們替您找到了答案。本書將引導您從單純、可重複利用的解決方案走入更多元的問題層面,並藉由Cocoa Touch以及Objective-C來帶您認識iOS發展的一般模式。有了這本iOS私房祕笈,您的下一個App程式將會更加完美,可維護性也將更高。
本書特色
本書對於新手或資深軟體開發者都相當實用,裡頭充滿了最新的實用範例,教導您如何為專題增添專家等級的功能,文字說明清楚易懂,針對程式碼的部分,更是有詳盡的描述。如果您希望能在App上加入一些令人耳目一新的元素,這本書將是您不可或缺的好幫手!
作者簡介:
麥特.德朗斯Matt Drance
麥特.德朗斯在8年的蘋果公司職涯後創立了蘋果iOS開發顧問公司「Bookhouse」。他為Pragmatic工作室培養了新的iOS開發人員,並在Apple Outsider網站(appleoutside.com)上分享了對此一產業的想法。當他不編寫程式、寫作、教學或是在家裡當個好爸爸的時候,他會到北加州玩滑雪板以及賽車。
保羅.沃倫Paul Warren
80年代早期保羅.沃倫在Commodore64電腦上編寫程式,為企業彙編了20年的程式之後,他回歸到圖形系統的工作。保羅.沃倫的iOS開發顧問公司「Primitive Dog」專門從事2D動畫及自訂控制項。
譯者簡介:
曾吉弘
CAVEDU教育團隊技術總監,對於Android、機器人與各種合金玩具有狂熱。
著有多本Android與機器人相關書籍,為一群活潑近乎躁動的機器人玩家頭目。官方網站:http://www.cavedu.com。
各界推薦
名人推薦:
iOS是個極為適合撰寫程式的平臺,觸控式螢幕和互動式的特性打開了應用程式的全新一頁。我們看到許多才華洋溢的程式設計師發展出幾年前無法想像的軟體。iPhone、iPod touch和iPad的可攜性與合理的電池壽命,使我們可以隨時隨地使用這些產品。簡單來說,iOS已經指出未來的方向——我只能跟我2007年時買的,上面還跑著Snow Leopard作業系統的MacBook Pro說抱歉了,當時我是用它來開發軟體和處理相片。很顯然地,電腦的作業方式已經改變了,時光不會再回到2005年那個年代了。
真是令人興奮啊!誰不想為這些令人驚訝的裝置開發軟體呢?
就另一方面來說,我們實際上為iOS以及觸控螢幕這個框架撰寫程式也就是這幾年的事情。當然,讀者中可能有人有開發Mac OS X軟體的經驗,比從其他平臺跳過來iOS的人多了一些相關經驗。但請別誤會,無論如何,在為iOS撰寫程式時,我們都像是踏上一塊嶄新的土地。以我而言,即使從十幾年前就撰寫了我的第一個Cocoa App,也為Mac OS X程式開發寫了許多書與文章,但一開始面對iOS時,也有很多次焦頭爛額的經驗,埋頭研究寫成Xcode的使用說明好一陣子才逐漸上手。有太多東西需要搞懂了,包含如何建立完美的啟動畫面,如何使表格與卷軸以最有效率的方式執行命令,如何連接現今應用程式常用的網路服務,如何配合iOS的運行,而不是處處跟它作對。
所幸,我們不需要獨自面對所有問題。本書的作者麥特與保羅彙整了一系列的範例,包含了最新、最符合iOS軟體發展潮流的技巧與練習。最終您將學習到完整的一套針對特定問題的解決方式,一有問題產生,就可以拿起本書參考。
其實本書用途不僅止於此,雖然本書集結了某些特定問題的解決方式,但是在閱讀的過程中,您還可以就近觀察麥特與保羅是如何面對、分析這些問題的。在我本身閱讀的過程當中,感覺就像一邊欣賞我最喜歡的主廚們在廚房烹煮食物,一邊觀察他們如何處理眼前的任務,即使是我認為我已經相當嫻熟的問題,都會有新的發現。
所以,拉張椅子坐下來吧。加入我最欣賞的兩位iOS開發者的旅程,並準備好學些東西吧!然後,再回去做出幾年前只能在白日夢中出現的美好程式!
James Duncan Davidson
2011年4月
名人推薦:iOS是個極為適合撰寫程式的平臺,觸控式螢幕和互動式的特性打開了應用程式的全新一頁。我們看到許多才華洋溢的程式設計師發展出幾年前無法想像的軟體。iPhone、iPod touch和iPad的可攜性與合理的電池壽命,使我們可以隨時隨地使用這些產品。簡單來說,iOS已經指出未來的方向——我只能跟我2007年時買的,上面還跑著Snow Leopard作業系統的MacBook Pro說抱歉了,當時我是用它來開發軟體和處理相片。很顯然地,電腦的作業方式已經改變了,時光不會再回到2005年那個年代了。
真是令人興奮啊!誰不想為這些令人驚訝的裝置開發軟體呢...
章節試閱
引言
作為程式開發人員,您的任務在於解決問題,而這些問題有時繁瑣難解、有時簡單、有時則非常有趣。或許,這在一般意義上根本就不是「問題」,但您的任務就是找出解決方案。
而身為本書作者,我們的任務在於幫助您提升解決問題的能力與效率——可以的話先提升解決問題的能力、再提升效率。所以,我們決定將其書寫成私房秘技的形式,將焦點放在解決具體的問題上,而不是以一個更高層次的角度討論程式撰寫的相關議題。
這並不代表本書不具教育意義,私房秘技的優點在於提供您一套可信的解決方法,尤其是針對您不想獨自面對的問題。當然,缺點就是您可能只想要複製本書的程式碼,並直接貼入您的專題中,而沒有花時間去了解其背後的運作方式。少寫了一些程式碼而節省時間當然是件好事,但了解您如何省下這些時間也同等重要,這樣才有可能將這樣的精神運用在其他情況中。
若您對iOS SDK相當熟悉,並希望進一步提升App的品質與撰寫效率,那這本書絕對是最佳選擇。在這裡我們並不談如何撰寫App,而是希望透過這本書讓您的App更上一層樓,若您相對而言是比較進階的軟體開發師,您將會發現應用本書中某些方法之後,會使您省下相當多時間。
在撰寫技巧的過程當中,我們盡量以可重複利用性為優先考量,我們並不只想著要寫出一堆程式碼來解決問題,而是建立一套沿用性高的系統,讓您可以任意地將之納入其他您經手的iPAD、iPhone專題。當然,其中有些程式碼您可以直接納入其他專案。但是請記得,本書就像坊間任何一本傳統食譜一樣,在實際烹煮的時候可以依照您的喜好或需要,任意加入或移除其中某些配方或材料。如果要開發全新的App也是一樣,我們邀請您將書中的技巧延伸、編輯加工來滿足您的需要!
本書的技巧會把問題從頭到尾解說完畢,但我們誠摯地希望這些技巧能刺激您思考,為何我們選擇這樣的路徑解決問題。尤其在像Cocoa這樣的環境之中,有許多的選項可以選擇,眾多的選項代表眾多問題解決方式。基於一致性考量,我們一開始就針對某些方法與型態問題做了決定,有些方法也許您早已相當熟悉,也有可能有些是您之前沒有想到的,有些可能則是全新的東西。無論如何,我們會在此先解釋撰寫過程中的一些預設。
格式與語法
為了配合書本的篇幅限制,我們必須為程式碼制定某些格式。而像Objective-C這樣繁複冗長的程式語言,時常會超出字元的限制,所以,有些時候程式碼看起來與平常習慣的不同,比如過多的暫時變數、怪異的歸位符號等等。當然,我們盡力維持Cocoa一貫的傳統精神,但在某些地方還是頁面獲得勝利。若您看到某些地方程式撰寫風格忽然變換,請不要太過介意。
類目
本書中有為數不少的私房秘技使用標準的Apple類別中的類目來完成任務。類目是Objective-C語言中很強大的功能之一,它常常使得新的Cocoa程式設計師無法融入。類目功能也很容易擾亂名稱空間,並在複雜的類別階層中產生(或遮掩)未預期的行為。但我們對類目不必感到害怕,而應該學習如何心存敬意。在考慮使用類目時,請這樣做:
先問問您自己,建立子類別或新類別會不會是更好的選擇?套一句Apple的Objective-C程式語言中所說的:「類目並不是次類別的替代品。」
在延伸一個您無法控制的類別時,請記得把類目方法加入可辨認的字首(比方說UIApplication)來避免和之後的API產生符號相衝的問題。本書中所有新增的類目方法都會以prp_開頭。
千萬不要在類目中覆寫像是「-drawRect:」這種已定義的方法,這樣會遮蔽來源類別的實作,破壞原先的資料架構。
合成實例變數
在本書中,您幾乎不會在標頭檔或範例中看到任何實例變數(ivar)的宣告,我們選擇只使用Objective-C 2.0原有的屬性,也就是執行過程ivar合成功能,來宣告類別儲存。這樣一來我們可以少打很多字、少讀很多東西,而能將重點鎖定在私房秘技本身。關於這個部分,會在秘技35〈利用現代的Objective-C類別設計〉中有更多描述。
私有類別延伸
私有類別延伸相對來說是Objective-C語言中比較新的功能,本書中經常使用。這個功能可以藉著將標頭的干擾降低來增加可讀性,還有,它也能為您程式碼的採用者或是維護者提供更清楚的描繪。在秘技35〈利用現代的Objective-C類別設計〉中,我們會詳細介紹私有類別延伸與合成實例變數給還不熟悉這兩個技巧的讀者。
-dealloc的清除動作
除了移除-dealloc中所有相關的實例變數之外,在我們的例子中還將它們全部歸零。這個習慣是Cocoa程式設計者之間爭議最大的話題之一。兩方的論點都有其道理。然而,本書的目的並不在於介入這場論爭:我們將它歸零,不代表您需要照著做。如果您不喜歡看到-dealloc中歸零的狀態,您可以隨您的心意決定。
區塊vs.委派
區塊(Blocks)是Mac OS X Snow Leopard和iOS 4.0加入C與Objective-C語言的新功能,因為發展的時間不長,關於區塊或委派功能使用時機的討論依舊熱烈。在本書當中,我們依照實際情況做出我們覺得合理的判斷,當然,您大可以將使用代理功能的秘技加入區塊,反之亦然。我們的最終目標在於幫助您找出最簡單、最自然的問題解決方式。
本書的最高準則,就是減低您程式碼的複雜性與重複性,我們選擇的並不只是解決問題的捷徑,而是以長遠的角度來看,都還是隨時可用的問題解決方式。我們衷心希望,本書中分享的概念可以成為您iOS程式設計師旅程中很好的助力。
網路資源
本書有自己的網頁,網址為:http://pragprog.com/titles/cdirec。在網頁中,您可以找到許多實用的資訊,介紹如下:
1.網頁中可以找到所有範例的程式碼全文。
2.在論壇中可以與其他讀者、iOS程式設計師、作者討論。
3.回報本書校對錯誤、內容建議等,一起幫忙使本書更盡善盡美。
引言
作為程式開發人員,您的任務在於解決問題,而這些問題有時繁瑣難解、有時簡單、有時則非常有趣。或許,這在一般意義上根本就不是「問題」,但您的任務就是找出解決方案。
而身為本書作者,我們的任務在於幫助您提升解決問題的能力與效率——可以的話先提升解決問題的能力、再提升效率。所以,我們決定將其書寫成私房秘技的形式,將焦點放在解決具體的問題上,而不是以一個更高層次的角度討論程式撰寫的相關議題。
這並不代表本書不具教育意義,私房秘技的優點在於提供您一套可信的解決方法,尤其是針對您不想獨自面對的問題。當然...
目錄
技巧1 添加一個基本的歡迎畫面轉換
技巧2 為您的初始螢幕轉換加入個人風格
技巧3 將一個自訂通知View動態化
技巧4 建立可重複使用的開關按鈕
技巧5 建立帶有紋理顏色的圓角View
技巧6 建立一個可重複使用的網頁View
技巧7 自訂滑桿與進度View
技巧8 建立一個自訂手勢辨識器
技巧9 建立獨立的警示View
技巧10 為屬性字串建立一個標籤
技巧11 無限瀏覽專輯封面
技巧12 播放專輯牆上的音樂
技巧13 好玩好用的自動捲動文本View
技巧14 建立自訂的數字控制功能
技巧15 簡化表格元件製作
技巧16 在網路資料庫中使用聰明的表格元件
技巧17 找出表格元件的次視窗
技巧18 組織視窗模式
技巧19 產出兩個tone的表格視窗
技巧20 增加table view的邊界陰影
技巧21 在縮放視窗中放置靜態的內文資料
技巧22 建立一個有幻燈片效果的分頁捲動系統
技巧23 繪製填滿漸層色彩的貝茲曲線
技巧24 以多種動畫效果來建立動態圖像
技巧25 綜合View與變形View的製作
技巧26 將漸層圖層動態化
技巧27 改造陰影
技巧28 動態View的呈現
技巧29 建立一個簡易發射器
技巧30 為頁面換一個View
技巧31 搞定網路活動指示燈
技巧32 簡化網路服務連線
技巧33 建置一個簡易的 HTTP POST
技巧34 透過HTTP上傳檔案
技巧35 利用現代的Objective-C類別設計
技巧36 建立智慧型除錯輸出
技巧37 設計更聰明的使用者預設資料取得方法
技巧38 檢視並穿越View的層次
技巧39 初始化基本數據模型
技巧40 將資料儲存到一個範圍裡
技巧1 添加一個基本的歡迎畫面轉換
技巧2 為您的初始螢幕轉換加入個人風格
技巧3 將一個自訂通知View動態化
技巧4 建立可重複使用的開關按鈕
技巧5 建立帶有紋理顏色的圓角View
技巧6 建立一個可重複使用的網頁View
技巧7 自訂滑桿與進度View
技巧8 建立一個自訂手勢辨識器
技巧9 建立獨立的警示View
技巧10 為屬性字串建立一個標籤
技巧11 無限瀏覽專輯封面
技巧12 播放專輯牆上的音樂
技巧13 好玩好用的自動捲動文本View
技巧14 建立自訂的數字控制功能
技巧15 簡化表格元件製作
技巧16 在網路資料庫中使用聰明...