在swift中使用present时如何阻止ViewController闪烁

Posted

技术标签:

【中文标题】在swift中使用present时如何阻止ViewController闪烁【英文标题】:How do i stop ViewController from flickering when using present in swift 【发布时间】:2020-04-21 14:41:29 【问题描述】:

我对 swift 非常陌生,我在创建项目时遇到了麻烦。我有两个视图控制器,其中一个带有一个按钮,按下时可以播放视频。当视频结束时,我的代码会自动将其带到新的视图控制器。但是你可以(一毫秒)看到原始的视图控制器。我已经关闭了所有动画,但我仍然可以看到它。有没有办法阻止这种情况?我是否以错误的方式构建项目?正如我所说,我是 swift 新手,对 html 和 CSS 了解不多,因此非常感谢任何帮助。

import UIKit
import AVKit
import AVFoundation

class ViewController: UIViewController 

    let playerViewController = AVPlayerViewController()

    override func viewDidLoad() 
        super.viewDidLoad()
    

    override func didReceiveMemoryWarning() 
        super.didReceiveMemoryWarning()
    

    @IBAction func playButton(_ sender: AnyObject) 
        let movieURL = Bundle.main.url(forResource: "video", withExtension: "mp4")!
        let player = AVPlayer(url: movieURL as URL)

        playerViewController.player = player
        NotificationCenter.default.addObserver(self, selector: #selector(playerDidFinishPlaying), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: playerViewController.player?.currentItem)

        self.present(playerViewController, animated: false) 
            self.playerViewController.player!.play()
        
    


    @objc func playerDidFinishPlaying(note: NSNotification) 


        self.playerViewController.dismiss(animated: false)


        let storyBoard = UIStoryboard(name: "Main", bundle: nil)

        let secondVC = storyBoard.instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController

        self.present(secondVC, animated:false)
    

【问题讨论】:

【参考方案1】:

如果你的意思是它不采取全屏。从 ios 13 开始,默认演示不是全屏。因此,您需要使用 UIModalPresentationFullScreen 设置 modalPresentationStyle UIViewController 的属性。

代替:

self.present(secondVC, animated:false)

使用:

    secondVC.modalPresentationStyle = .fullScreen
    self.present(secondVC, animated:false)

【讨论】:

感谢您提供的非常有用的提示。当您从第一个视图控制器和第二个视图控制器转换时,您知道如何停止闪烁吗? 不客气。我们应该编辑secondVCmodalPresentationStyle 属性而不是playerViewController @user2655836 如果它是您问题的正确答案,请将其标记为正确答案。 感谢您的回复,但闪烁仍然存在,因此问题/问题没有解决。如果您有任何想法,请告诉我。 设置modalPresentationStyle 属性决定了将要呈现的视图控制器的呈现风格。因此,要在过渡到 secondVC 时停止闪烁,请将 secondVCmodalPresentationStyle 设置为 .fullScreen

以上是关于在swift中使用present时如何阻止ViewController闪烁的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中添加子视图时如何阻止动画重置。?

如何在我的应用程序中阻止用户(swift + parse)

Swift:当定时器触发时,如何阻止平移手势取消?

如何阻止 Swift 在我的 [String] 中注入转义的单引号?

如何防止 UILabel 在 Swift 中阻止对父 UIButton 的触摸?

如何在 Swift 3 中刷新视图