2014年7月13日 星期日

Simple Camera programmatically using Swift language

【說明】

此份筆記是根據ISBN:978-986-201-900-9這本書的第23章節所紀錄的。

此份專案可以讓使用者使用內建相機拍照並在UIImageView上顯示,也可以讓使用者從相簿裡挑選照片在UIImageView上顯示。


【專案開發步驟】

建立專案:

使用Single View Application模板建立一個名為CameraApp的專案,使用iPhone裝置。

設計使用者介面:

在畫面上加入一個UIImageView以及兩個按鈕,如下圖所示。

設計User Interface
建立物件與類別的IBAction,如下圖所示。

物件與類別的IBAction
建立物件與類別的IBOutlet,如下所示。

@IBOutlet var imageView: UIImageView

實作CameraViewController:

讓ViewController繼承UIImagePickerControllerDelegate與UINavigationControllerDelegate,如下所示。

class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { }

在takePhoto:方法裡增加下面的程式。

if (UIImagePickerController.isSourceTypeAvailable(.Camera)) {
            
    var picker: UIImagePickerController = UIImagePickerController()
    picker.delegate = self
    picker.allowsEditing = true
    picker.sourceType = .Camera
    picker.showsCameraControls = true
            
    self.presentViewController(picker, animated: true, completion: nil)

}
首先先判斷裝置是否有支援相機的功能。建立一個變數名為picker,資料型態為UIImagePickerController。將delegate設為自己。將是否允許編輯設為是。將sourceType設為相機。允許顯示相機的控制。最後想picker顯示出來。

在selectPhoto:方法裡增加下面的程式。

if (UIImagePickerController.isSourceTypeAvailable(.SavedPhotosAlbum)) {
            
    var picker: UIImagePickerController = UIImagePickerController()
    picker.delegate = self
    picker.allowsEditing = true
    picker.sourceType = .SavedPhotosAlbum
    
    self.presentViewController(picker, animated: true, completion: nil)

}
與takePhoto:方法類似,但是將sourceType設為SavePhotosAlbum。

實作UIImagePickerController的delegate:

實作以下func。

func imagePickerController(_picker: UIImagePickerController!, didFinishPickingMediaWithInfo info: NSDictionary!) { }
當使用者拍完照或是挑選完照片後會呼叫這個func。

將以下程式碼加入到didFinishPickingMediaWithInfo:方法裡。

var choseImage: UIImage = info[UIImagePickerControllerEditedImage] as UIImage
imageView.image = choseImage
        

_picker.dismissViewControllerAnimated(true, completion: nil)
建立一個變數名為choseImage,資料型態為UIImage,存放使用者所拍的照片或是所挑選的照片。將使用者的照片給imageView去顯示。最後讓視窗消失即可。


【執行結果】

    
    


【專案範例】

沒有留言:

張貼留言