22

次のコードを使用して PhotoLibrary からビデオを選択しようとしています

imageController.mediaTypes = [kUTTypeMovie: NSString]

ビデオを選択した後、圧縮すると、配列が境界から外れます。

オンラインで検索したところ、次の行が見つかりました。Swift バージョンに変換できません (リンク) imageController.mediaTypes = [[NSArray alloc] initWithObjects:(NSString *)kUTTypeMovie, nil]

上記の行の Swift バージョンをお知らせください。誰かがこれの Swift バージョンを提供できると非常に便利です。

質問 2 :

選択したビデオをアプリで表示したいのですが、タップされたときに再生する必要があります。外部プラグインなしで組み込みライブラリを使用してそれを行うことはできますか?

4

11 に答える 11

34

Swift 2.2 に基づく

imagePickerController があり、画像とビデオの両方を選択したい場合:

let imagePickerController = UIImagePickerController()
var videoURL: NSURL?    

@IBAction func selectImageFromPhotoLibrary(sender: UIBarButtonItem) {
  imagePickerController.sourceType = .PhotoLibrary
  imagePickerController.delegate = self
  imagePickerController.mediaTypes = ["public.image", "public.movie"]

  presentViewController(imagePickerController, animated: true, completion: nil)    
}

次に、ビデオを選択したら、その NSURL を出力します。

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
  videoURL = info["UIImagePickerControllerReferenceURL"] as? NSURL
  print(videoURL)
  imagePickerController.dismissViewControllerAnimated(true, completion: nil)
}

質問 2 の場合:

はい、AVPlayer を介して実行できます。AVKit と AVFoundation をインポートする必要があり、コードは次のようになります。

if let videoURL = videoURL{
  let player = AVPlayer(URL: videoURL)

  let playerViewController = AVPlayerViewController()
  playerViewController.player = player

  presentViewController(playerViewController, animated: true) {
    playerViewController.player!.play()
  }
}

ここでデモを作成しました。参照できますが、100% 必要なものではないかもしれません。

于 2016-06-20T21:22:31.693 に答える
3
func openCamera() {
  if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera) {
    println("captureVideoPressed and camera available.")

    var imagePicker = UIImagePickerController()

    imagePicker.delegate = self
    imagePicker.sourceType = .Camera
    imagePicker.mediaTypes = [kUTTypeMovie!]
    imagePicker.allowsEditing = false

    imagePicker.showsCameraControls = true

    self.presentViewController(imagePicker, animated: true, completion: nil)   
  } else {
    println("Camera not available.")
  }  
}

func imagePickerController(  didFinishPickingMediaWithInfo info:NSDictionary!) {
  videoUrl = info[UIImagePickerControllerMediaURL] as! NSURL!
  let pathString = videoUrl.relativePath
  self.dismissViewControllerAnimated(true, completion: nil)
}
于 2015-06-08T18:32:13.130 に答える
2

スイフト4.0

あなたのクラスは UIImagePickerControllerDelegate プロトコルを採用しています

class classname: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate

その後、作成する必要があります

let imagePickerController = UIImagePickerController()

これをボタンのアクションに追加します:-

imagePickerController.sourceType = .photoLibrary

imagePickerController.delegate = self

imagePickerController.mediaTypes = ["public.image", "public.movie"]

present(imagePickerController, animated: true, completion: nil)

委任方法

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {

 let videoURL = info["UIImagePickerControllerReferenceURL"] as? NSURL
 print(videoURL!)
 imagePickerController.dismiss(animated: true, completion: nil)
}
于 2018-10-29T05:24:36.727 に答える
0
func startMediaBrowserFromViewController(viewController: UIViewController!, usingDelegate delegate : protocol<UINavigationControllerDelegate, UIImagePickerControllerDelegate>!) -> Bool {
  if UIImagePickerController.isSourceTypeAvailable(.SavedPhotosAlbum) == false {
    return false
  }
  let mediaUI = UIImagePickerController()
  mediaUI.sourceType = .SavedPhotosAlbum
  mediaUI.mediaTypes = [kUTTypeMovie as String]
  mediaUI.allowsEditing = true
  mediaUI.delegate = delegate
  presentViewController(mediaUI, animated: true, completion: nil)
  return true
}
于 2016-02-29T01:33:52.143 に答える