在Playground中使用实时照片

时间:2015-11-30 03:02:37

标签: ios swift uikit swift-playground phlivephoto

我已经做了大量的网络搜索,但我目前正在尝试使用Playground中的“Live Photos”。我知道这个框架(PHLivePhoto),我不知道如果在Playground中与他们合作是可能的,因为没有太多的“导入”,因为似乎没有任何“实时照片”可用在线下载。有什么想法吗?

1 个答案:

答案 0 :(得分:27)

可以从实际实时照片的元素中在Playground 中制作和查看PHLivePhoto。

在OS X的Photos应用中,选择一张实时照片并转到菜单

  

档案>出口>出口原创......

enter image description here

它会创建.JPG.mov

将这两个文件放在Playground的Resources文件夹中(菜单View> Navigators> Show Project Navigator)。

使用NSBundle获取这两个文件的网址(在我的示例中,文件为“IMG_0001.JPG”和“IMG_0001.mov”):

let imgURL = NSBundle.mainBundle().URLForResource("IMG_0001", withExtension: "JPG")!
let movURL = NSBundle.mainBundle().URLForResource("IMG_0001", withExtension: "mov")!

创建一个实际图像,我们将需要它用于实时图片预览图像:

let prevImg = UIImage(named: "IMG_0001.JPG")!

导入必要的框架:

import Photos
import PhotosUI
import XCPlayground

将Playground设置为异步模式:

XCPlaygroundPage.currentPage.needsIndefiniteExecution = true

现在我们将使用PHLivePhoto的{​​{1}}方法从我们的元素创建PHLivePhoto:

requestLivePhotoWithResourceFileURLs

然后我们这样打电话:

func makeLivePhotoFromItems(imageURL: NSURL, videoURL: NSURL, previewImage: UIImage, completion: (livePhoto: PHLivePhoto) -> Void) {
    PHLivePhoto.requestLivePhotoWithResourceFileURLs([imageURL, videoURL], placeholderImage: previewImage, targetSize: CGSizeZero, contentMode: PHImageContentMode.AspectFit) {
        (livePhoto, infoDict) -> Void in
        // for debugging: print(infoDict)
        if let lp = livePhoto {
            completion(livePhoto: lp)
        }
    }
}

例如,假设您希望Playground制作实时视图:

makeLivePhotoFromItems(imgURL, videoURL: movURL, previewImage: prevImg) { (livePhoto) -> Void in
    // "livePhoto" is your PHLivePhoto object
}

请注意,由于无法与实时视图进行交互以开始播放Live Photo,因此我们必须使用makeLivePhotoFromItems(imgURL, videoURL: movURL, previewImage: prevImg) { (livePhoto) -> Void in let rect = CGRect(x: 0, y: 0, width: 2048, height: 1536) let livePhotoView = PHLivePhotoView(frame: rect) livePhotoView.livePhoto = livePhoto XCPlaygroundPage.currentPage.liveView = livePhotoView livePhotoView.startPlaybackWithStyle(PHLivePhotoViewPlaybackStyle.Full) } 的{​​{1}}方法自行完成。

您可以通过在菜单

中显示助理编辑器来强制实时视图显示在Playground中
  

查看>助理编辑>显示助理编辑器

enter image description here

注意:Playground可能需要一些时间来创建PHLivePhoto并启动实时视图。

使用Xcode 7.3b + ,我们终于可以在Playgrounds中进行一些UI交互。

我用一个简单的视图和touchesBegan改编了这个答案,只需在控制台这样说时点击LivePhoto:

PHLivePhotoView

Swift 3.0.2(Xcode 8.2.1 )的相同示例:

startPlaybackWithStyle