Ios 3D触摸屏(Peek和Pop)应返回UIViewController,但视频尚未就绪
在函数中Ios 3D触摸屏(Peek和Pop)应返回UIViewController,但视频尚未就绪,ios,objective-c,swift,return,grand-central-dispatch,Ios,Objective C,Swift,Return,Grand Central Dispatch,在函数中 func previewingContext(previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? { let peekViewController = UIViewController() if videosActive == true { // DO VIDEO PROCESS
func previewingContext(previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {
let peekViewController = UIViewController()
if videosActive == true {
// DO VIDEO PROCESSING TO GET VIDEO URL
// CREATE AVLPLAYER WITH URL
// ADD AVPLAYERLAYER TO PEEKVIEWCONTROLLER.LAYER
avPlayer.play()
}
return peekViewController
}
我希望能够像在Instagram中一样偷看视频并看到它们。但是,此函数需要返回UIViewController,因此我必须在任何if语句之外有一些返回UIViewController。我该怎么办?在我这样做的30%时间里,视频在PeekViewController中完美播放,但70%的时间里根本没有视频。Print语句告诉我,在
avPlayer.play()
之前调用了return-peek-viewcontroller
,因此70%的时间未准备好/加载视频进行显示。有没有办法只在视频准备好后调用返回peekViewController
?我试图使用GCD,但遇到了函数需要返回某些内容的基本问题。你们能帮我解决这个问题吗?方法签名允许一个可选的返回,所以如果没有视频,你们可以返回nil
。你们的代码有几个问题。首先,您不应该那样创建peekViewController
。它应该是一个普通的VC在你的故事板,然后所有的代码来设置视频应该在该VC的子类。然后沿以下行创建peekViewController
:
let peekViewController = storyboard?.instantiateViewControllerWithIdentifier("PeekViewController") as? PeekViewController
然后将资源传递给VC,以便它执行所有视频设置:
peekViewController.asset = pictureAssets[hltPicIndexPath.row] as! PHAsset
// or
peekViewController.asset = videoAssets[hltVideoIndexPath.row] as! PHAsset
另外,
requestAVAssetForVideo
在后台运行并立即返回。因此,“测试此时间选项”总是出现在player.play()
之前,但这应该不是问题。我知道,但如果将最后一行替换为return nil,则根本不会显示视频。有没有办法在我确定视频已加载后才能调用最后一行?那么您的if语句检查的是什么?