此份筆記是根據ISBN:978-986-201-900-9這本書的第24章節所紀錄的。
此份專案可以讓使用者錄製一段影片,並在MPMoviePlayerController上顯示,並在影片播畢後顯示UIAlertView提醒使用者。
【專案開發步驟】
建立專案:
使用Single View Application模板建立一個名為VideoApp的專案,使用iPhone裝置。
設計使用者介面:
在畫面上加入一個按鈕,如下圖所示。
設計User Interface |
建立物件與類別的IBAction,如下圖所示。
物件與類別的IBAction |
實作VideoViewController:
首先在ViewController內import兩個標頭檔,如下所示。
import MediaPlayer
import MobileCoreServices
讓ViewController繼承UIImagePickerControllerDelegate與UINavigationControllerDelegate,如下所示。
class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { }
建立兩個變數,分別如下。
var videoURL: NSURL!
var videoController: MPMoviePlayerController!
實作按鈕按下後的func:
將以下程式碼加入至func內。
if (UIImagePickerController.isSourceTypeAvailable(.Camera)) {
var picker: UIImagePickerController = UIImagePickerController()
picker.delegate = self
picker.allowsEditing = true
picker.sourceType = .Camera
picker.mediaTypes = UIImagePickerController.availableMediaTypesForSourceType(.Camera)
picker.videoQuality = .TypeHigh
self.presentViewController(picker, animated: true, completion: nil)
}
概念大致上與這篇相似,不同的地方在於多了mediaType與videoQuality。mediaType是設定picker的媒體型式,這裡設定為所有形式。videoQuality是設定影片的品質,這裡設定較高的畫質。
實作影片的播放:
當使用者確認使用所拍攝的影片後會呼叫didFinishPickingMediaWithInfo:方法,如下所示。
func imagePickerController(_picker: UIImagePickerController!, didFinishPickingMediaWithInfo info: NSDictionary!) { }
將以下程式碼放置didFinishPickingMediaWithInfo:方法內。
videoURL = info[UIImagePickerControllerMediaURL] as NSURL
_picker.dismissViewControllerAnimated(true, completion: nil)
videoController = MPMoviePlayerController()
videoController.contentURL = videoURL
videoController.view.frame = CGRectMake(0, 0, 320, 460)
view.addSubview(videoController.view)
NSNotificationCenter.defaultCenter().addObserver(self, selector: "videoPlayBackDidFinish", name: MPMoviePlayerPlaybackDidFinishNotification, object: videoController)
videoController.play()
先取得影片的系統URL。將相機視窗消失。將videoController這個變數設定為MPMoviePlayerController物件。將videoController的內容URL設定為剛剛取得的URL。設定videoController的畫面大小。請求view將videoController顯示出來。MPMoviePlayerController物件有個通知功能,可以用來控制影片的播放,所以我們在這建立一個通知,當影片播完時MPMoviePlayerPlaybackDidFinishNotification就會送出,並觸發videoPlayBackDidFinish:這個方法。最後叫VideoController播放影片。
使用影片播放器通知:
當影片播放結束後,NotificationCenter會發送播放完畢的通知,並觸發videoPlayBackDidFinish:這個方法,所以我們必須建立一個videoPlayBackDidFinish:方法,處理通知產生後的動作,如下所示。
func videoPlayBackDidFinish() { }
建立一個func,讓通知產生時可以執行func內的事情。
將以下程式碼放置videoPlayBackDidFinish:方法內,如下所示。
NSNotificationCenter.defaultCenter().removeObserver(self, name: MPMoviePlayerPlaybackDidFinishNotification, object: nil)
videoController.stop()
videoController.view.removeFromSuperview()
videoController = nil
var alertView = UIAlertController(title: "Video Playback", message: "Just finished the video playback, The video is now removed", preferredStyle: .Alert)
alertView.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
self.presentViewController(alertView, animated: true, completion: nil)
首先將NotificationCenter監聽通知的匹配移除。叫videoCotroller停止播放影片。將videoController的view從畫面上移除。將videoController設為空的。最後顯示UIAlertView來告訴使用者影片已經播畢。
【執行結果】
【專案範例】
沒有留言:
張貼留言