Я создаю класс для наложения строки состояния, когда интернет-соединение недоступно. В этом классе я просто инициировал 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()
- Я не сделал ключ окна видимым.
- Я также не добавил в окно над корневым окном делегата приложения.
Мой вопрос: почему он отображал содержимое на экране в строке состояния? Является ли свойство класса UIViewPropertyAnimator
, который добавляет это окно, в мое приложение?