我正在构建一些类似于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)
}
}
编辑:一个可能的解决方案
因此,这是一个总的侥幸,但我想通了如何在这种情况下做到这一点。
我只是从我的playVideo
函数中删除了行presentMoviePlayerViewControllerAnimated(moviePlayer)
。
不完全确定这是为什么工作,但它适用于我的上下文。
我有一个'类似'的问题。不一样的事情,但它涉及从长手势到拖动手势http://stackoverflow.com/questions/27790899/begin-uipangesture-event-from-a-pressed-state-at-time-of-instantiation/ 27791190#27791190 – Aggressor 2015-01-20 23:22:17
它不会回答你的问题,但我会说我找不到方法来通过这个手势。我认为你最好的选择是用手势监听器添加超级视图,并在其下添加子视图。然后,您可以从超级视图中微调管理事件,这些超级视图可以处理单点触摸(当另一个视图添加到顶端时不会取消,因为现在将其添加到下方) – Aggressor 2015-01-20 23:23:21
感谢链接@Aggressor。任何方式,你可以告诉我如何以你的方式做到这一点?随意使用我的代码,或者只是粘贴一个要点,如果你自己的代码,我可以弄明白。 – 2015-01-20 23:24:50