как заставить UIView выходить с одной стороны на другой UIView с анимацией? - PullRequest
0 голосов
/ 25 мая 2020

Я использую в своем проекте swift. в этом проекте у меня есть один UIView (называемый mySubView1) внутри UIViewController, а другой (называемый mySubView2) внутри mySubView1 (mySubView2 содержит некоторые данные для отображения). вот так:

+++++++++++++++++++++++++++++++++++++++++++
|                                         |
|                                         |
|             myViewController            |
|                                         |
|        ++++++++++++++++++++++++         | 
|        |      mySubView1      |         |
|        |                      |         |                                               
|        |  ++++++++++++++++++  |         |
|        |  |   mySubView2   |  |         |
|        |  ++++++++++++++++++  |         |
|        ++++++++++++++++++++++++         |
|                                         |
|                                         |
|                                         |
|                                         |
+++++++++++++++++++++++++++++++++++++++++++

тогда mySubView2 выходит из mySubView1 и передает нижнюю часть mySubView1 с анимацией, подобной этой:

+++++++++++++++++++++++++++++++++++++++++++
|                                         |
|                                         |
|             myViewController            |
|                                         |
|        ++++++++++++++++++++++++         | 
|        |      mySubView1      |         |
|        |                      |         |                                               
|        |  ++++++++++++++++++  |         |
|        |  |   mySubView2   |  |         |
|        |  |                |  |         |
|        +++|                |++|         |
|           |    someData    |            |
|           |                |            |
|           ++++++++++++++++++            |
|                                         |
+++++++++++++++++++++++++++++++++++++++++++

представьте себе принтер, который печатает некоторые данные на бумаге (myViewController как принтер и mySubView1 в качестве вывода на принтер, а mySubView2 в качестве бумаги)

ОБНОВЛЕНО: Я использую NSLayoutAnchor в своем проекте:

override func viewDidLoad() {
    super.viewDidLoad()

    let heightAnchor: NSLayoutConstraint
    let mySubView1 = UIView()
    mySubView1.translatesAutoresizingMaskIntoConstraints = false
    mySubView1.backgroundColor = .blue
    view.addSubview(mySubView1)

    mySubView1.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
    mySubView1.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
    mySubView1.widthAnchor.constraint(equalTo: view.widthAnchor, constant: -40).isActive = true
    mySubView1.heightAnchor.constraint(equalToConstant: 100).isActive = true

    let mySubView2 = UIView()
    mySubView2.clipsToBounds = true
    mySubView2.translatesAutoresizingMaskIntoConstraints = false
    mySubView2.backgroundColor = .yellow
    view.addSubview(mySubView2)

    mySubView2.topAnchor.constraint(equalTo: mySubView1.topAnchor, constant: 40).isActive = true
    mySubView2.centerXAnchor.constraint(equalTo: mySubView1.centerXAnchor).isActive = true
    mySubView2.widthAnchor.constraint(equalTo: mySubView1.widthAnchor, constant: -40).isActive = true
    heightAnchor = mySubView2.heightAnchor.constraint(equalToConstant: 100)
    heightAnchor.isActive = true
    heightAnchor.constant = 500
    UIView.animate(withDuration: 3) {

        mySubView2.layoutIfNeeded()
    }
}

Ответы [ 2 ]

1 голос
/ 25 мая 2020

Вам нужно всего лишь выполнить следующие простые шаги:

  1. Сначала убедитесь, что subView1 и subView2 добавлены как подпредставления ViewController view.
  2. Убедитесь, что оба вида ограничены соответствующим образом. И вы задали ограничение heightAnchor для subView2.
  3. Теперь увеличьте постоянное значение heightAnchor ограничения subView2 и вызовите view.layoutSubViews() внутри блока завершения UIView.animate.
0 голосов
/ 25 мая 2020

Это можно сделать следующим образом:

  • Добавьте оба mySubView1 и mySubView2 в качестве подчиненных представлений контроллера представления.

  • Отправить mySubView1 по индексу ниже mySubView2

  • Используйте оба этих вызова для выполнения предыдущего шага:

    self.view.sendSubview(toBack:mySubView1)

    self.view.bringSubview(toFront:mySubView2)

  • Анимируйте границы mySubView2, чтобы они увеличивались в направлении Y

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