UIWindow выводит контент без выделения ключа и видимости - PullRequest
0 голосов
/ 22 октября 2019

Я создаю класс для наложения строки состояния, когда интернет-соединение недоступно. В этом классе я просто инициировал UIWindow в своей функции init. А в функции show мы анимируем окно для отображения содержимого.

import UIKit

class StatusBarOverlay: NSObject {
    private var overlayWindow: UIWindow?
    init(text : String) {


        let frame = CGRect(x: 0, y: -UIApplication.shared.statusBarFrame.height, width: UIScreen.main.bounds.width, height: UIApplication.shared.statusBarFrame.height)
        let banner = UIView(frame: CGRect(x: 0, y: 0, width: frame.width, height: frame.height))
        banner.backgroundColor = UIColor.init(red: 128.0/255.0, green: 161.0/255.0, blue: 193.0/255.0, alpha: 1.0)

        let label = UILabel(frame: banner.frame)
        label.textAlignment = .center
        label.font = .boldSystemFont(ofSize: 10)
        label.text = text
        label.textColor = .black
        banner.addSubview(label)

        let bannerWindow = UIWindow(frame: frame)
        bannerWindow.layer.masksToBounds = true
        bannerWindow.rootViewController = UIViewController()
        bannerWindow.windowLevel = .statusBar + 1
        bannerWindow.addSubview(banner)
        self.overlayWindow = bannerWindow


    }

    func show() {
        if overlayWindow?.isHidden == false {
            return
        }

        overlayWindow?.isHidden = false
        overlayWindow?.alpha = 0.0

        UIViewPropertyAnimator.runningPropertyAnimator(withDuration: 0.4, delay: 0, options: [.curveEaseIn], animations: {
            self.overlayWindow?.alpha = 1.0
            self.overlayWindow?.frame.origin.y = 0.0

        }) { (position) in
            UIViewPropertyAnimator.runningPropertyAnimator(withDuration: 0.2, delay: 3, options: [.curveEaseOut], animations: {
                self.overlayWindow?.frame.origin.y = -UIApplication.shared.statusBarFrame.height
            }, completion: { (position) in
                self.overlayWindow?.alpha = 0.0
                self.overlayWindow?.isHidden = true
            })
        }

    }

}

В другом классе я назвал

let statusBarOverLay = StatusBarOverlay.init(text: "No Internet Connectivity")
            statusBarOverLay.show()
  1. Я не сделал ключ окна видимым.
  2. Я также не добавил в окно над корневым окном делегата приложения.

Мой вопрос: почему он отображал содержимое на экране в строке состояния? Является ли свойство класса UIViewPropertyAnimator, который добавляет это окно, в мое приложение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...