顯示具有 課程 標籤的文章。 顯示所有文章
顯示具有 課程 標籤的文章。 顯示所有文章

2010-02-24

如何利用有限的時間學習 Xcode 與 iPhone 軟體開發

如果你也與我一樣(白天上班有公司的工作,下班後晚上有家庭、小孩課業,肯定也是沒有很多時間的朋友),自己的時間已經很少了,但是要怎麼著手學習 Xcode 與 iPhone 軟體開發?
你看到我前幾篇的文章提到,有那麼多的開發手冊要看,光是看目錄就暈倒了,還要看到何時?

我把我之前的經驗在這裡與各位分享,大家參考看看。

除了讀開發手冊之外,可以快速進入開發狀況的是史丹佛大學的 iPhone Application Development 課程,目前的「Winter 2010」版已經第三年了,之前兩年訂閱後都是在 Podcast 內,今年的訂閱後會歸類在 iTunes U 裡,而且還有字幕,對於聽力不是很強的朋友,是一個很好的機會。

訂閱後你就可以下載每個課程,然後同步在 iPhone/iPod touch 裡,隨時隨地可以利用時間學習。

訂閱方式如下:
從 iTunes 左側的 STORE 點選 iTunes Store

進入 iTunes U,按右邊選單的 Universities & Colleges

這時候你會看到很多學校,用英文字母分類,我們找到 S 的 Stanford
(如果你對其他學校的課程有興趣,也可以多看看)

進入之後,你可以從 CATEGORIES 的 Science and Technology 找到,或是直接從 WHAT'S NEW 就可以看到 iPhone Application Development (Winter 2010)

在 iPhone Application Development 的介紹頁面,按下 SUBSCRIBE 訂閱之後,就可以在 iTunes 的 iTunes U 資料庫內看到課程列表

另外,最快的方式(省略上述步驟)是直接從 iTunes 「功能表\進階\訂閱 Podcast..」. 輸入以下的 URL
http://deimos3.apple.com/WebObjects/Core.woa/Feed/itunes.stanford.edu.3124430053.03124430055

這樣也可以直接訂閱,然後就可以下載你要看的科目了。


*2010/11/06:
如果對物件導向不熟的,可以參考一下這篇


.

2009-08-16

給 Delphi 設計師快速入門 iPhone 程式設計

我最近在想,要如何幫助 Delphi 或是 VB 的設計師們可以快速入門 iPhone 程式開發。
Delphi 之所以方便使用,是提供了一系列方便使用的 VCL 元件,讓設計師可以快速地把視窗軟體實作出來。
所以,這次我就把 IB (Interface Builder) 與 Xcode 之間很類似 VCL 的拖曳觀念,來寫一篇教學文件給大家參考,希望可以有拋磚引玉的作用。
我在這裡的範例是做一個調色盤,有三個分別是紅綠藍的 Slider Bar,藉由 Slider Bar 的調整,讓整個背景隨時呈現色彩。


首先,開啟 Xcode 新增一個 Window-based Application
取名 palette

產生新的 Project 如下:

找到 MainWindow.xib 開啓,會交由 Interface Builder (IB)

在 IB 會看到兩個視窗,一個是 MainWindow.xib (像是 Delphi 的 View Forms/Units)。
(如果畫面不一樣,改變工具列上面的 View Mode)

另一個是 Window 的 View。(像是 Delphi 的 Form)

在 IB 按下 +SHIFT+L 開啓 Library (像是 Delphi 上面的 Components Palette)

將 Slider 拖曳到 Window 的 View 上面排列、調整位置、大小 (會 Delphi 這個就不難)

在 IB 按下 +SHIFT+I 開啓 Inspector (像是 Delphi 的 Object Inspector)。
設定 Slider 的『屬性』(記得 Window 點選到 Slider,跟 Delphi 設定屬性原理一樣)
Value Minimum: 0,Maximum: 255

再拖曳兩個 Label 進來 Window 的 View 上面排列,只要對該 Label 點兩下,就可以直接修改內容,分別給 Red Value 與 0

把這三個選取後,複製貼上(就像在 Delphi 的 Form 上面作業一樣),一共產生三組,分別要處理 RGB 用。

您也可變更 Label 的顏色『屬性』

這樣會比較好辨識
到這裡都很簡單吧!
把 Object 拉到 Window 的 View 上面,就像是在 Delphi 把 VCL 元件拉到 Form 上面一樣簡單。



接下來我們把元件的關係連結起來。

從 Library 把 NSObject(金黃色正方體) 拉到 MainWindow.xib 上面
看到這樣:
然後按 +4 把 Inspector 切換到 Identidy

這裡我們要設定 Class Identity, Class Action, Class Outlets 等三個部份

Class Identity 類別識別,目前是 NSObject,我們設定名稱為 Controller
Class Action 是指元件的動作,相當於 Delphi 的事件
Class Outlets 是哪些元件會在程式內用到的、會與畫面互動的,可以在這裡指定

再看一次我們的畫面,我命名如下:
sliderR, sliderG, sliderB 會觸發事件,我們要在程式內安排程式碼。
labelR, labelG, labelB 會因為事件發生,在程式碼內改變他們的屬性。

所以把這6個加到 Class Outlets 內。


確認 MainWindow.xib 點選到的是剛剛加進來的 Object (Type: NSObject)。
Class Identity 的 Class 命名為 Controller。
Class Action 分別加上 (在框框下面有個 + 號)
  • sliderChangedR: (Type: id)
  • sliderChangedG: (Type: id)
  • sliderChangedB: (Type: id)
Class Outlets 分別加上
  • sliderR (Type: UISlider)
  • sliderG (Type: UISlider)
  • sliderB (Type: UISlider)
  • labelR (Type: UILabel)
  • labelG (Type: UILabel)
  • labelB (Type: UILabel)

接著我們把 IB 建立的產生成 Class 檔案,選取功能表 File\Write Class Files...
接著的視窗內,Save As: 會依照剛剛 Class Identity 的 Class: Controller 命名
把檔案儲存在 Classes 的檔案夾內(我習慣把 Class 都放到 Classes 檔案夾內)
按下 Save 後,會出現詢問視窗,是否要把 Controller.m 與 Controller. h 加到 palette 專案裡,記得勾選 palette 後按下 Add
回到 Xcode 會多出這兩個檔案 Controller.m 與 Controller.h

Controller.h 的內容


Controller.m 的內容


開啓 Controller.h 將 @interface Controller: 後面加上 NSObject
這裡可以看到 6 個 IBOutlet 與 3 個 IBAction 的定義

再來開啓 Controller.m 來安排事件程式:
依照 sliderR, sliderG, sliderB 的變化而改變 labelR, labelG, labelG 的值。

這時候興奮地按下 Build and go,出現 iPhone 的畫面了!
可是拉動 Slider 並不會看到數值改變啊!

那是因為我們在 IB 還沒有把 Connections 建立起來。
所以回到 IB 點選 MainWindows.xib 的 Controller,然後按 +2 把 Inspector 切換到 Connections Inspector:
這裡區分三個部份,我們要用前面兩個:Outlets 與 Received Actions。
看到 Outlets 內的 labelB 右邊的圈圈吧!將游標移到上面,會出現一個 + 號,然後按住滑鼠左鍵,移動到 Window 上面的 labelB 然後放開滑鼠左鍵。在移動滑鼠的時候,會看到一條藍色的連結線,讓設計者很清楚哪一個要連結。


Connections Inspector 的 Outlets 內 labelB 會有連結 Label (0) 的顯示

依此類推,將 labelG, labelR, sliderR, sliderG, sliderB 也都連結起來

然後換 Received Actions 內的三個。

一樣從 sliderChangedB 右邊的圈圈開始,拉到 Window 的藍色 Slider 上面,然後放開滑鼠左鍵

在放開滑鼠左鍵後會看到這個視窗,點選 Value Changed
依此類推,可以看到 Received Actions 顯示

記得把 MainWindow.xib 存檔後,回到 Xcode
Build and go 就可以看到結果了!

最後階段要改變 Window 背景顏色

開啓 Controller.h 加上 #import "paletteAppDeledate.h"

開啓 Controller.m 在 @implementation 上面加上 @class paletteAppDelegate;

因為 window 的這個元件是在 paletteAppDelegate 內,我們要從 Controller 去使用 paletteAppDelegate 內的元件。
(有點像是 Delphi 要把被使用的 Unit 加到 uses 內)

接著在這三個事件內加上這兩行

最後的 Controller.m 程式

執行看看,成功了吧,恭喜!

*最後的 Controller.m 內,三個事件 sliderChangedR, sliderChangedG, sliderChangedB 重複的那兩行程式,可以另外做一個 Method 處理,就留給各位練習看看。

範例程式下載1(github)

範例程式下載2(bitbucket)
.

2009-07-16

WWDC 2009 Session Videos 已經發行

2009 年的 WWDC Session Video 已經出來了,不過今年的要購買。
網址: http://developer.apple.com/products/videos.html

iPhone Session 與 Mac Session 各要 US$299,合購要 US$499.

.

2009-06-06

要如何開始 iPhone 軟體開發


很多人問我,要如何開始開發 iPhone 的軟體?

我來給個方向:

iPhone+AppStore 是以前 iPod+iTunes Music Store 的架構衍化而來的。

所以首先,要有興趣、去了解、使用看看 iPhone,如果覺得太貴買不起,可以先買一台 iPod touch。
iPhone/iPod touch 都需要與電腦用 iTunes 連結,你的電腦如果是 MS Windows 的也可以安裝,所以先清楚 iTunes 與 iPhone/iPod touch 之間的關係,去發覺 iTunes 的豐富內容,除了連上軟體商店下載軟體,也要嘗試音樂、影片、Podcast 等等的功能。我身邊如果沒有 iPod 都會覺得渾身不對勁,因為它實在太豐富了。

這個架構就是很多比 Apple 大的公司多年來都無法複製成功的經驗!
我也擔心未來很難有人會複製成功。

還有,記得不要去玩什麼破解、越獄、JailBreak的浪費時間


如果沒有興趣,就不要繼續看下去。

其次,要有一部 Mac 電腦,不要想說要去下載破解在 PC 的,也是浪費時間

我希望您看了這篇,可以很快進入開發狀態

以上兩個基本配備,可以從 Apple 的官網點選【購買】進去看,也可以去 PCHome 無息分期購買。

接下來,軟體開發部份就不用花費了,因為 Apple 給開發人員免費的開發工具 Xcode,實在比 Visual Studio 還好用!
可以到 http://developer.apple.com/ 下載。

要學 iPhone 程式就從 http://developer.apple.com/iphone/ 開始。

接著就從我最早的文章找看看,要讀的手冊,從哪幾本手冊開始看。

要買什麼書來看?我都沒有買,就按照 http://developer.apple.com/iphone/ 的指導一步一步進行,看它提供的內容,多做多練習就會了。

史丹佛大學也有一組課程 ,CS 193P 配合影片、講義、範例程式等教材,也是快速入門的方法。

上個月有買一本國人翻譯的【iPhone SDK 開發範例大全】,只是為了支持去買,偶爾會拿來看一看。讀英文手冊會比較慢的朋友,可以參考看看這本書,不過為了寫好程式,還是建議看英文的。

程式語言是用 Objective-C,你可以參考 好好學 Objective-C 2.0 這一篇
實在是比 C++ 還簡單!讓我這樣形容:很接近 Java 與 Delphi.
當然,有物件導向程式設計觀念的更好!就可以像我一樣,一個星期就可以將程式寫出來!

歡迎加入 iPhone 軟體開發的行列,也歡迎加入 Mac OS X 的軟體開發陣容!

.

2009-05-25

好好學 Objective-C 2.0 吧!

當你越看越多,發現要好好認識一下 Objective-C,需要把這幾本手冊好好讀一讀:

The Objective-C 2.0 Programming Language

Objective-C 2.0 Runtime Programming Guide

Objective-C 2.0 Runtime Reference


*2010/11/06:
如果對物件導向不熟的,可以參考一下這篇


.

Table View Programming Guide for iPhone OS

這份手冊 Table View Programming Guide for iPhone OS 是接著 View Controller Programming Guide for iPhone OS 之後要仔細讀的!

除此之外,在 Table 裡面的資料取得,最好懂一些 Key-Value Coding,什麼是 Key-Value Coding 呢?

那也需要讀一下 Key-Value Coding Programming Guide


.

2009-05-23

產生含有 Navigation controller 的 Tab bar controller

在 Xcode 新增專案時,會有六個常用的範本給我們加入,其中擺在第一個的 Navigation-based Application 大概是最常用的,像 iPhone 內建的程式【聯絡資訊】。
而如果要產生像內建程式【音樂】的,一開始要選 【Tab Bar Application】範本。
在我剛寫第一個 iPhone 程式時,我挑選的是 Navigation-based Application,但是當我要分頁的時候,發現有點困難,再回去看【View Controller Programming Guide for iPhone OS】的 Combining Tab Bar and Navigation Controllers 章節才發現原來 Navigation View 是要在 Tab Bar 裡面。
還好,透過 Interface Builder 的功能,可以稍作調整,不用重新來過。

我在這個範例介紹的,不是用 Xcode 內建的 Tab Bar Application 範本開始,而是直接從一個乾淨的 Window-based Application 加入 Tab Bar,再加入 Navigation。

結果會是這樣:
最後我還會進階把第二頁換成 TableView


準備好了嗎?那就開始吧!

首先,執行 Xcode 選 New Project\ Window-based Application
(我用的 Xcode 是 Version 3.1.3)

專案名稱 Tabs

Xcode 產生需要的檔案:
不過我通常會把 Classes 內的這幾個 Group 展開
4.點選 Resources 的 MainWindow.xib,開啓 Interbase Builder,這時候的主畫面只有這幾個
按下鍵盤 +SHIFT+L 開啓 Library 把 "Tab Bar Controller" 拖曳進來 MainWindow.xib 的視窗內

MainWindow.xib 的視窗會看到 Tab Bar Controller,把它展開看看
這裡有一個 UITabBarController + 一個 UITabBar + 兩個 UIViewController,等一下 Selected View (Item 1) 的要加入一般的 View Controller,第二個 View Controller (Item 2) 的要加入 Navigation Controller

畫面如下:
看到 Item 1 項目現在是選取狀態,所以有點藍黑色,你可以先把 Item 1 與 Item 2 各點兩下,分別改成【第一頁】與【第二頁】

記得在 MainWindow.xib 先存檔 +S


接著要做幾個連結的動作,先把 Tab Bar Controller 加入 Delegate 的 Outlet:
1.點選 MainWindow.xib 內的 Tabs App Delegate,按下 +SHIFT+I 開啓 Inspecter
2.在 Class Outlet 內按底下的 "+" 號,加入 Outlet: rootController,Type: UITabBarController
*註:這裡在新版的 Xcode 有些不同,我在最後補充(20101024)

3.接著在 MainWindow.xib 的視窗內,點選 Tabs App Delegate,然後按住 Control 不放,接著滑鼠按左鍵移動一下,看到藍色拖曳線就可以把 Control 放看,滑鼠左鍵按著不要放,把拖曳線移到 Tab Bar Controller 之後放開,會出現 Outlets\rootController 的視窗,點選 rootController。

你可以按下 +2 看到 Tabs App Delegate 的 Outlets 內,有一個 rootController 連到 Tab Bar Controller

把 MainWindow.xib 存檔 +S 後,回到 Xcode 開啓 TabsAppDelegate.h 的檔案,把剛剛的 Tab Bar Controller(rootController) Outlet 定義進來

#import _UIKit/UIKit.h_


@interface TabsAppDelegate : NSObject {

UIWindow *window;

IBOutlet UITabBarController *rootController;

}


@property (nonatomic, retain) IBOutlet UIWindow *window;

@property (nonatomic, retain) IBOutlet UITabBarController *rootController;

@end

接下來要建立兩個 UIViewController 分別給這兩個標籤項目 Tab Item,一個是基本的 UIViewController,另一個是 UINavigationController

在 Xcode 的 Classes 上面按右鍵選 Add\New File,選 Cocoa Touch Class 的 UIViewController subclass,把 Option 勾選 With XIB for user interface,一併把畫面產生出來
名稱: FirstViewController.m

在 Classes 內會看到 FirstViewController 的 .h .m .xib 三個檔案

我通常會把 .xib 放在 Resources 內

把 FirstViewController.xib 打開編輯,拖曳一個 Lable 進來,內容為【第一頁】
然後存檔,開啓 MainWindow.xib,我們要讓第一個標籤與 FirstViewController 連結。
1.點選 Tab Bar Controller 的第一個標籤,按 +4 把 Class 指定 FirstViewController
2.按 +1 把 NIB Name 指定 FirstViewController

然後就可以馬上看到 View 畫面變成這樣:

記得存檔 +S,再回到 Xcode 打開 TabsAppDelegate.m 修改如下:

#import "TabsAppDelegate.h"

@implementation TabsAppDelegate


@synthesize window;

@synthesize rootController;


- (void)applicationDidFinishLaunching:(UIApplication *)application {


// Override point for customization after application launch

[window addSubview:rootController.view];

[window makeKeyAndVisible];

}


- (void)dealloc {

[window release];

[rootController release];

[super dealloc];

}


@end


執行看看,點選標籤1與標籤2,是不是正常切換:

接下來就是重點了,要把 Navigation 設定在標籤2

回到 Xcode 加入一個 UIViewController subclass 取名 MyNavigationController,跟之前 FirstViewController 一樣,不過要把 MyNavigationController.h 的 @interface 繼承自 UIViewController 改成 UINavigationController

#import _UIKit/UIKit.h_


@interface MyNavigationController : UINavigationController {


}


@end

接著開啓 TabsAppDelegate.h 修改如下:

#import _UIKit/UIKit.h_

#import "MyNavigationController.h"


@interface TabsAppDelegate : NSObject {

UIWindow *window;

IBOutlet UITabBarController *rootController;

MyNavigationController *navigationController;

}


@property (nonatomic, retain) IBOutlet UIWindow *window;

@property (nonatomic, retain) IBOutlet UITabBarController *rootController;

@property (nonatomic, retain) MyNavigationController *navigationController;


@end


記得回到 TabsAppDelegate.m 加上

@synthesize navigationController;

還有,Navigation Controller 也要有一個 View Controller,所以繼續加上一個 UIViewController 取名 SecondViewController 的 UIViewController subclass,並建立 SecondViewController.xib

開啓 SecondViewController.xib 修改 View:
存檔 +S 後,開啓 MainWindow.xib

與 FirstViewController 做法一樣,點選標籤2,把 Class 設定 MyNavigationController

接著點選 MainWindow.xib 的 Tab Bar Controller
按 +1 把 Title "第二頁" 的 Class 改成 "Navigation Controller"

再來把 MainWindow.xib 的 Tab Bar Controller 展開,點選第二頁的 View Controller

按 +4 把 Class 設為 SecondViewController


按 +1 把 NIB Name 設為 SecondViewController


接著就可以看到 View 的畫面變成這樣
執行看看吧!
第二頁是 Navigation 的 ViewController


如果底下的 Toolbar 不要顯示,可以在 MainWindow.xib 把 Tab Bar Controller 展開,點選 Navigation Controller (第二頁)
按 +1 把 Shows Toolbar 勾選取消即可


很簡單吧!多做幾次就熟悉了,你也可以任意加入其他 UIViewController

==============================

再進階把 SecondViewController 的 UIViewController 換成 UITableViewController:

回到 Xcode 在 Classes 按右鍵 Add \ New File,選 Objective-C Object,Subclass of 選 UITableViewController,取名 MyTableViewController

開啓 MyTableViewController.h 修改如下:

#import


@interface MyTableViewController : UITableViewController {

NSMutableArray *tableData;

}


@property (nonatomic, retain) NSMutableArray *tableData;


@end

開啓 MyTableViewController.m 加上:

@synthesize tableData;

- (void)viewDidLoad {

//[super viewDidLoad];

tableData = [[NSMutableArray alloc] initWithObjects:@"", @"", @"", nil];

}


在 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

// Set up the cell... 下面加上

cell.text = [tableData objectAtIndex:indexPath.row];



存檔後回到 IB 新增一個 ThirdView.xib,從 Library 拖曳一個 UITableView 放到 View 的上面排好,點選 File's Owner 在 Class Outlets 加上 Outlet: tableView,Type: UITableView

然後把關係建立如下:

開啓 MainWindow.xib 把 Tab Bar Controller 展開,點選 Second View Controller (Item)
把 Class 換成 MyTableViewController

MainWindow.xib 也跟著變了


再把 NIB Name 改成 ThirdView

執行看看,第二頁就變成有 TableView Controller 的畫面:

不錯吧!如果可以跟到這裡,那真的要好好恭喜你!

如果你無法照著我的步驟做到這裡,那真的要好好讀一讀我上一篇介紹的

基本上要讀這本 Interface Builder User Guide

*2010/10/24補充:
在新版 Xcode 的 IB,有關 Class 加入 Outlet 部份有些不同,移到了 Library 內,我在這裡補充:

點選要加入 Outlet 的 Class
在 Inspecter 的第四頁,按下這個箭頭,會開啓 Library

點選該 Class 的 Inheritance 改成 Outlets

這樣就可以繼續了

.