Для моего приложения я хочу реализовать свой собственный AlertController. Но я хотел бы иметь такое же поведение представления, как и UIAlertController: сделать весь экран немного темнее с полупрозрачным фоном и оживить оповещение. Я не хочу, чтобы оно появлялось при модальном представлении.
В идеале я хотел бы представить свой AlertView, такой как UIAlertView, с помощью метода present, например:
let alert = MyAlertController(type: .example)
present(alert, animated: true, completion: nil)
Edit : Извините, на мой взгляд, это было очевидно, ясно, что я хотел, но читая вопрос снова, я вижу проблему ... Так вот, что я попробовал до сих пор. Я создал подкласс UIViewController
, ниже вы можете увидеть (укороченный) код.
Текущее поведение : когда я представляю этот ViewController, он просто представляет его в модальном виде вместо затемнения экран и выскакивает мой взгляд. Я знаю, что мне нужно было бы реализовать анимацию, но прежде чем я хочу перейти к
Желаемое поведение : я могу использовать свой класс так же, как UIAlertController
(см. над). Мне нужно только инициализировать контроллер, а затем вызвать настоящее. Как мне этого добиться? Я думаю, это должно быть как-то возможно, поскольку UIAlertController
также использует упомянутый метод present. Спасибо!
class FRAlertController: UIViewController {
private var alertView: UIView!
private var alertViewCenterXConstraint: NSLayoutConstraint!
private var alertViewCenterYConstraint: NSLayoutConstraint!
init(type: FRAlertControllerType, buttons: Bool = true) {
super.init(nibName: nil, bundle: nil)
setupView(type: type, buttons: buttons)
}
private func setupView(type: FRAlertControllerType, buttons: Bool) {
setupAlertView()
}
private func setupAlertView() {
alertView = UIView()
alertView.backgroundColor = .white
view.addSubview(alertView)
alertView.translatesAutoresizingMaskIntoConstraints = false
alertViewCenterXConstraint = NSLayoutConstraint(item: alertView!, attribute: .centerX, relatedBy: .equal, toItem: view, attribute: .centerX, multiplier: 1, constant: 0)
alertViewCenterYConstraint = NSLayoutConstraint(item: alertView!, attribute: .centerY, relatedBy: .equal, toItem: view, attribute: .centerY, multiplier: 1, constant: 0)
let widthConstraint = NSLayoutConstraint(item: alertView!, attribute: .width, relatedBy: .equal, toItem: view, attribute: .width
, multiplier: 0.7, constant: 0)
let aspectRatio = NSLayoutConstraint(item: alertView!, attribute: .width, relatedBy: .equal, toItem: alertView, attribute: .height, multiplier: 1.05, constant: 0)
view.addConstraints([
alertViewCenterXConstraint,
alertViewCenterYConstraint,
widthConstraint,
aspectRatio
])
}
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.black.withAlphaComponent(0.4)
}
}