Таможенный кросс-фэйдж переход от и до черного - PullRequest
0 голосов
/ 24 мая 2019

Я разрабатываю приложение для tvOS в Swift, используя UIKit, и я хотел бы реализовать переход черного затухания между двумя ViewControllers, который обозначает всю функциональность и не требует каких-либо пользовательских представлений или кода, добавляемых к ViewControllers источника и назначения.

Я ищу что-то вроде этого:

enter image description here

Я много искал и много чего пробовал, но мне мало повезло, что он заработал. Две сложности усложняют задачу:

  1. Один из моих ViewControllers содержится внутри UISearchController.
  2. Мои фоны не черные.

Буду признателен за любую помощь.

1 Ответ

0 голосов
/ 25 мая 2019

Я наконец нашел достойный способ сделать это. Вот пользовательский класс segue, который плавно выполняет переход.

StoryboardFadeToBlackSegue.swift

import UIKit
import Foundation

class StoryboardFadeToBlackSegue: UIStoryboardSegue {

  override func perform() {
    guard let window = (UIApplication.shared.delegate as? AppDelegate)?.window else {
      super.perform()
      return
    }
    let overlay = UIView(frame: window.frame)
    overlay.layer.zPosition = 1
    overlay.backgroundColor = .black
    overlay.alpha = 0.0
    window.addSubview(overlay)
    UIView.animate(withDuration: 0.5, delay: 0, options: [.curveEaseOut], animations: {
      overlay.alpha = 1.0
    }, completion: { _ in
      self.source.present(self.destination, animated: false, completion: {
        UIView.animate(withDuration: 0.6, delay: 0, options: [.curveEaseIn], animations: {
          overlay.alpha = 0.0
        }, completion: { _ in
          overlay.removeFromSuperview()
        })
      })
    })
  }
}

Чтобы использовать его, установите этот класс как связанный класс в инспекторе атрибутов для вашего Segue.

setting the custom segue class

...