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
함수에서 삭제했다.
왜 그것이 효과가 있었는지는 모르지만 제 맥락에서 효과가있었습니다.
'비슷한'문제가있었습니다. 똑같은 것이 아니라 오랜 제스처에서 드래그 제스처로가는 것에 관심이 있습니다. http://stackoverflow.com/questions/27790899/begin-uipangesture-event-from-a-pressed-state-at-time-of-instantiation/ 27791190 # 27791190 – Aggressor
귀하의 질문에 답변하지 않을 것이지만 제스처를 전달할 방법이 없다고 말할 것입니다. 가장 좋은 방법은 제스처 수신기를 사용하여 수퍼 뷰를 추가하고 하위 뷰를 아래에 추가하는 것입니다. 그리고 나서 당신은 하나의 터치를 처리 할 수있는 슈퍼 뷰에서 이벤트를 micromanage합니다 (다른 뷰가 추가 될 때 취소되지 않습니다). – Aggressor
@Aggressor 링크를 보내 주셔서 감사합니다. 당신을 위해 일하는 방식으로이 일을하는 방법을 보여 줄 수있는 방법이 있습니까? 내 코드를 자유롭게 사용하거나 자신의 코드 인 경우 요지를 붙여 넣으면됩니다. 알아낼 수 있습니다. –