Создать анимированный UIView сверху вниз с радиусом угла - PullRequest
1 голос
/ 28 октября 2019

Я разработал приложение для iOS, и у меня есть анимация, я хотел бы создать анимацию, подобную этой .

Я попробовал:

blueView.backgroundColor = .blue
let duration = 1
let radius = blueView.frame.height / 2

self.blueView.frame.size = CGSize(width:   50, height:   50)
blueView.layer.cornerRadius = radius
if #available(iOS 11, *) {
    UIView.animate(withDuration: TimeInterval(duration), animations: {
       self.blueView.frame.size = CGSize(width:   self.view.frame.width, height:   self.view.frame.height)    
    }, completion: { _ in
                        UIView.animate(withDuration: TimeInterval(duration), animations: {

                            self.blueView.layer.cornerRadius = 0
                        })
    })
}

Но я не достиг того, чего хочу, ни одной идеи или помощи, чтобы получить это?

1 Ответ

1 голос
/ 28 октября 2019

Похоже, вам не хватает обновления радиуса blueView в вашей анимации для начала. Ниже приведены некоторые быстрые изменения / дополнения, чтобы приблизиться к анимации, которую вы упомянули. Я добавил представление программным способом и внес минимальные изменения в ваш код.

let blueView: UIView = {
    // set starting position of view here
    let view = UIView(frame: CGRect(x: UIScreen.main.bounds.size.width , y: 0, width: 50, height: 50))
    view.backgroundColor = .blue
    view.layer.cornerRadius = view.frame.height / 2
    return view
}()

override func viewDidLoad() {
    super.viewDidLoad()
    self.view.addSubview(blueView)
}

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    let duration: TimeInterval = 1

    if #available(iOS 11, *) {
        UIView.animate(withDuration: duration, animations: {
            // set blue view size to double the screen so it can cover full screen with corner radius
            self.blueView.frame.size = CGSize(width: self.view.frame.height * 2, height:   self.view.frame.height * 2)
            // update corder radius to equal new size
            self.blueView.layer.cornerRadius = self.view.frame.height
            // Set ending position of view here to offset new size and radius
            self.blueView.center = CGPoint(x: UIScreen.main.bounds.width, y: 0)
        }, completion: { _ in
            UIView.animate(withDuration: duration, animations: {
                self.blueView.frame.size = CGSize(width: self.view.frame.width, height:   self.view.frame.height)
                self.blueView.layer.cornerRadius = 0
                self.blueView.center = self.view.center
            })
        })
    }
}

Я уверен, что это можно сделать по-другому, но я хотел, чтобы код был близок к тому, с чего вы начали, в надежде, что он поможет вам понять, что я изменил.

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