我正在构建一些类似于SnapChat的功能。按住一个视图,它会显示要播放的电影,然后在电影结束(当前正在工作)时,或当用户拿起他们的手指(不工作)时返回主视图控制器。这就是这个问题是关于)。
我的问题在于IBAction,当视频出现时,UIGestureRecognizerState
从Began
更改为Cancelled
。
我希望状态在用户抬起手指之前不要改变,这应该将UIGestureRecognizerState
注册为Ended
关于如何做到这一点的任何提示都会很棒。谢谢!
class ViewController: UIViewController {
var moviePlayer: MPMoviePlayerViewController!
@IBAction func handleLongPress(recognizer: UILongPressGestureRecognizer) {
println("\(recognizer)")
if recognizer.state == UIGestureRecognizerState.Began {
playVideo()
}
if recognizer.state == UIGestureRecognizerState.Ended {
self.moviePlayer.moviePlayer.stop()
}
}
func videoHasFinishedPlaying(notification: NSNotification){
println("Video finished playing")
}
func playVideo() {
// get path and url of movie
let path = NSBundle.mainBundle().pathForResource("IMG_8602", ofType:"MOV")
let url = NSURL.fileURLWithPath(path!)
moviePlayer = MPMoviePlayerViewController(contentURL: url)
presentMoviePlayerViewControllerAnimated(moviePlayer)
// construct the views
moviePlayer.view.frame = self.view.bounds
self.view.addSubview(moviePlayer.view)
// remove controls at top and bottom of video
moviePlayer.moviePlayer.controlStyle = MPMovieControlStyle.None
NSNotificationCenter.defaultCenter().addObserver(self, selector: "videoHasFinishedPlaying:",
name: MPMoviePlayerPlaybackDidFinishNotification, object: nil)
}
}
编辑:一种可能的解决方案
所以这是一个完全侥幸,但我想出了如何在这种情况下做到这一点。
我只是从我的presentMoviePlayerViewControllerAnimated(moviePlayer)
函数中删除了行playVideo
。
不完全确定为什么会起作用,但它适用于我的背景。
答案 0 :(得分:0)
这是一种可能性,但我愿意接受更好的建议。
谨慎。如果您的视图有其他触摸事件,请确保此“主视图”不会超过它们,因为它将拦截这些事件并将其占用为其手势(除非您将其设置为同时识别它们)。如果是这种情况,您可以将此“主视图”仅设置为屏幕的一个小端口,您需要不间断地监听触摸事件