首页 > 解决方案 > 如何绕过不完整的 segue 错误

问题描述

我想我遇到了 Xcode 本身的错误,并希望能找到一些帮助以某种方式绕过该问题。我有一个用 AVKit 播放的视频,我想在它完成后转到另一个视图控制器。我发现必须先关闭视频视图控制器,然后才能调用 segue,所以我添加了它。视频的结尾与新的视图控制器匹配,所以我希望切换平滑,所以我设置了动画:false 表示关闭,这就是导致问题的原因。如果动画设置为true,则segue运行良好,但如果设置为false,则segue没有完全完成,视频被禁用,我可以看到旧的视图控制器,segue只有在我点击屏幕时才会生效,并出现新的视图控制器。这是那个代码

animPlayer.dismiss(animated: false)

self.performSegue(withIdentifier: "BackpackSegue", sender: self)

更奇怪的是,代码在物理 ipad 上运行得非常好,所以它一定是模拟器错误

编辑:这是整个 swift 文件,我是新手,所以如果您需要项目中的其他内容,请告诉我。

import UIKit
import AVKit

class FrontDoorOpen: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

    }
    }
    */
    override var prefersStatusBarHidden: Bool{
        return true
    }
    @IBOutlet weak var SegueImage: UIImageView!
    let animPlayer = AVPlayerViewController()

    @IBAction func DoorCloseSegue(_ sender: Any) {
        if let path = Bundle.main.path(forResource: "DoorClose", ofType: "avi", inDirectory: "SegueAnimations")
        {
            let SegueAnimation = AVPlayer(url: URL(fileURLWithPath: path))


            animPlayer.player = SegueAnimation
            animPlayer.showsPlaybackControls = false
            animPlayer.videoGravity = AVLayerVideoGravity.resizeAspectFill
             NotificationCenter.default.addObserver(self, selector: #selector(self.finishVideo), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil)

            present(animPlayer, animated: false, completion:
        {
                SegueAnimation.play()
        })
        }
        SegueImage.isHidden = false
    }
    @objc func finishVideo()
    {
        animPlayer.dismiss(animated: false)
        // Simulator Pauses Here !!
        self.performSegue(withIdentifier: "DoorCloseSegue", sender: self)

    }
}

在尝试了更多之后,模拟器似乎在关闭和转场之间暂停,转场只发生在点击

标签: swiftxcode

解决方案


推荐阅读