Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 3D触摸屏(Peek和Pop)应返回UIViewController,但视频尚未就绪_Ios_Objective C_Swift_Return_Grand Central Dispatch - Fatal编程技术网

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语句检查的是什么?