PushViewController () заставляет popover работать в полноэкранном режиме - PullRequest
0 голосов
/ 24 сентября 2018

Я хочу вставить поповер поверх моего контроллера вида.В настоящее время этот код находится в моем подклассе UIView:

func presentGameOver() {
        let transition: CATransition = CATransition()
        transition.duration = 0.75
        transition.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut)
        transition.type = CATransitionType.fade

        let currentController = (getCurrentViewController() as! UINavigationController).topViewController!
        currentController.navigationController!.view.layer.add(transition, forKey: nil)

        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let vc = storyboard.instantiateViewController(withIdentifier: "GameOverViewController") as! GameOverViewController
        vc.modalPresentationStyle = UIModalPresentationStyle.popover
        vc.highScore = highScore
        vc.score = score
        vc.FONT_H = FONT_H
        vc.delegate = self

        currentController.navigationController?.pushViewController(vc, animated: false)
    }

Это мое объявление класса:

class GridView: UIView, ModalHandler, UIPopoverPresentationControllerDelegate {

У меня также есть эти два метода:

func popoverPresentationControllerShouldDismissPopover(_ popoverPresentationController: UIPopoverPresentationController) -> Bool {
    return false
}

func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle {
    return UIModalPresentationStyle.none
}

В раскадровке для контроллера представления, которым я хочу быть popover, я устанавливаю размер контента ( this и this ).

Однако,когда отображается поповер, он отображается в полноэкранном режиме.Когда я раньше пользовался поповерами, я представлял их.Не работает ли отображение поповера с помощью pushViewController()?

1 Ответ

0 голосов
/ 24 сентября 2018

Анимация довольно сложная, если у вас мало опыта.Следующий код может дать вам некоторые подсказки.

    func presentGameOver() {
    let transition: CATransition = CATransition()
    transition.duration = 0.75
    transition.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut)
    transition.type = CATransitionType.fade

    let currentController = (getCurrentViewController() as! UINavigationController).topViewController!
   currentController.navigationController!.view.layer.add(transition, forKey: nil)

    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let vc = storyboard.instantiateViewController(withIdentifier: "GameOverViewController") as! GameOverViewController
    vc.modalPresentationStyle = UIModalPresentationStyle.popover
    vc.highScore = highScore
    vc.score = score
    vc.FONT_H = FONT_H
    vc.delegate = self
    if let popoverPresentationController =  vc.popoverPresentationController{
        popoverPresentationController.delegate = self;
        popoverPresentationController.sourceView  = self
        popoverPresentationController.sourceRect  = CGRect.init(x: 200, y: 200, width: 500, height: 300)}
    currentController.present(vc, animated: false) {}

}
...