Увеличение и уменьшение UIView от позиции кнопки с анимацией - PullRequest
0 голосов
/ 30 ноября 2018

Я хочу открыть UIView при нажатии кнопки, и представление должно быть всплывающим от начального положения кнопки до того времени, пока изображение не открывается в галерее.При нажатии на изображение изображение открывается из позиции щелчка и охватывает весь экран.Я хочу того же поведения с UIView при нажатии кнопки.Я пробовал следующий код:

Исходная позиция:

UIView.animate(withDuration: 0.9, delay: 0.0, options: .curveLinear, animations: {
    self.vwDetails.frame = CGRect(x: self.btnSelectedVendor.frame.origin.x, y: self.btnSelectedVendor.frame.origin.y, width: self.btnSelectedVendor.frame.width, height: self.btnSelectedVendor.frame.height)
}, completion: nil)

При нажатии кнопки:

UIView.animate(withDuration: 0.9, delay: 0.0, options: .curveLinear, animations: {
    self.vwDetails.frame = CGRect(x: self.vwContainer.frame.origin.x, y: self.vwContainer.frame.origin.y, width: self.vwContainer.frame.width, height: self.vwContainer.frame.height)
}, completion: nil)

Этот код не работает для меня.

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 30 ноября 2018

Чтобы добиться одновременно перевода и масштабирования, вам понадобится что-то вроде этого:

let originalTransform = yourView.transform
let scaledTransform = originalTransform.scaledBy(x: 0.2, y: 0.2)
let scaledAndTranslatedTransform = scaledTransform.translatedBy(x: 0.0, y: -250.0)
UIView.animate(withDuration: 0.7, animations: {
  self.main.transform = scaledAndTranslatedTransform
})
0 голосов
/ 30 ноября 2018

Попробуйте это

Замените ваш код

UIView.animate(withDuration: 0.9, delay: 0.0, options: .curveLinear, animations: {
    self.vwDetails.frame = CGRect(x: self.vwContainer.frame.origin.x, y: self.vwContainer.frame.origin.y, width: self.vwContainer.frame.width, height: self.vwContainer.frame.height)
}, completion: nil)

На это:

UIView.transition(with: self.vwContainer, duration:0.5, options: .curveLinear, animations: {
             self.vwContainer.frame.size = CGSize(width: self.view.frame.width, height: self.vwContainer.frame.height)
            self.vwContainer.center = self.view.center
        }) { (b) in

        }

Вы можете настроить позиционирование в соответствии с вашими требованиями

0 голосов
/ 30 ноября 2018

Я думаю, вам нужно что-то вроде этого:

self.vwDetails.frame = CGRect(x: self.vwContainer.frame.origin.x, y: self.vwContainer.frame.origin.y, width: self.vwContainer.frame.width, height: self.vwContainer.frame.height)

Сначала вы устанавливаете начальную позицию

UIView.animate(withDuration: 0.9, delay: 0.0, options: .curveLinear, animations: {
    self.vwDetails.frame = CGRect(x: self.vwContainer.frame.origin.x, y: self.vwContainer.frame.origin.y, width: self.vwContainer.frame.width, height: self.vwContainer.frame.height)
}, completion: nil)

и после запуска анимации

...