原文鏈接:Take Video Tutorial in iOS8 with Swift
原文日期:2015/07/09
蘋果公司提供了UIimagePickerController
-這是一個使用 iOS 設備內(nèi)置的攝像頭來拍攝視頻的可視化界面缝其。在此教程中屯掖,我們將拍攝一段保存到手機相冊的視頻。教程運行在 iOS 8.4 和 Xcode 6.4 下。
打開 Xcode 并創(chuàng)建一個new Single View Application
,項目名稱為IOS8SwiftTakeVideoPlayerTutorial
儒洛,接著填上你的Organization Name
和Organization Identifier
鞍恢,選擇 Swift 語言,在設備一欄只選擇 iPhone沼瘫。
打開Storyboard
歌馍,然后在主視圖中拖入兩個按鈕,并分別設置兩個button
的title
為Take Video
和View Library
晕鹊。之后你的故事板內(nèi)容應該像下面這樣:
按住 Control
鍵 并選中兩個按鈕松却,點擊故事板右下角的Resolve Auto Layout Issues
按鈕(就是右下角那個三角形按鈕),選擇Add Missing Constraints
打開Assistant Editor
(關聯(lián)面板),并確保ViewController.swift
文件是打開著的溅话。按住 Control
鍵晓锻,把第一個按鈕拖出到ViewController.swift
文件中,并創(chuàng)建下面的Action
按住 Control
鍵飞几,把第二個按鈕拖出到ViewController.swift
文件砚哆,并創(chuàng)建下面的Action
打開ViewController.swfit
文件,并在文件頂部添加下面代碼:
import MobileCoreServices
import AssetsLibrary
修改ViewController
類的聲明:
class ViewController: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate {
ViewController
類中需要實現(xiàn)UIImagePickerController
的代理方法屑墨。實現(xiàn)takeVideo
方法:
@IBAction func takeVideo(sender: AnyObject) {
// 1 Check if project runs on a device with camera available
if UIImagePickerController.isSourceTypeAvailable(.Camera) {
// 2 Present UIImagePickerController to take video
controller.sourceType = .Camera
controller.mediaTypes = [kUTTypeMovie as! String]
controller.delegate = self
controller.videoMaximumDuration = 10.0
presentViewController(controller,
animated: true, completion: nil)
}
else {
println("Camera is not available")
}
}
-
isSourceTypeAvailable
用來檢測設備是否支持拍攝視頻躁锁。 -
ImagePickerController
的數(shù)據(jù)可以是Camera
或Movie
(圖片和視頻)兩種類型。視頻的maximum
(拍攝視頻的最長時間)長度設置為10秒卵史。
實現(xiàn) viewLibrary
方法:
@IBAction func viewLibrary(sender: AnyObject) {
// Display Photo Library
controller.sourceType =
UIImagePickerControllerSourceType.PhotoLibrary
controller.mediaTypes = [kUTTypeMovie as! String]
controller.delegate = self
presentViewController(controller,
animated: true, completion: nil)
}
點擊按鈕就會打開相冊战转。如果mediaType
沒有被設置為視頻類型,那么視頻文件就不會顯示以躯,只會顯示圖片資源槐秧。下面實現(xiàn)UIImagePickerControllerDelegate
:
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject: AnyObject]) {
// 1
let mediaType:AnyObject? = info[UIImagePickerControllerMediaType]
if let type:AnyObject = mediaType {
if type is String {
let stringType = type as! String
if stringType == kUTTypeMovie as! String {
let urlOfVideo = info[UIImagePickerControllerMediaURL] as? NSURL
if let url = urlOfVideo {
// 2
assetsLibrary.writeVideoAtPathToSavedPhotosAlbum(url,
completionBlock: {(url: NSURL!, error: NSError!) in
if let theError = error{
println("Error saving video = \(theError)")
}
else {
println("no errors happened")
}
})
}
}
}
}
// 3
picker.dismissViewControllerAnimated(true, completion: nil)
}
imagePickerController(_:didFinishPickingMediaWithInfo:)
方法告訴代理啄踊,用戶選擇了一段視頻。info
參數(shù)包含了選中的視頻的URL
數(shù)據(jù)
- 字典數(shù)據(jù)類型的
info
的mediatype
參數(shù)可用于檢測參數(shù)是否是movie
類型刁标。如果是就提取視頻的URL
-
writeVideoAtPathToSavedPhotosAlbum
方法會把視頻保存到手機相冊中 - 讓
ViewController
視圖消失
實現(xiàn)imagePickerControllerDidCancel
方法:
func imagePickerControllerDidCancel(picker: UIImagePickerController) {
picker.dismissViewControllerAnimated(true, completion: nil)
}
當用戶點擊Cancel
按鈕時颠通,View Controller
視圖就會消失掉。如果模擬器沒有視頻文件膀懈,請在真實的設備上編譯并運行這個項目顿锰。選擇”Take Video“拍攝一段視頻并選擇”Use Video“,接著選擇”View Library“启搂,視頻就會保存到手機相冊中了撵儿。
![](http://static1.squarespace.com/static/52428a0ae4b0c4a5c2a2cede/t/559d107ee4b0a65ec39328be/1436356736349/TakeVideo-Device.png?format=750w)
你可以在Github上下載IOS8SwiftTakeVideoPlayerTutorial
的代碼