Как правильно анимировать преобразования в ранее преобразованном UIView

Для Eclipse:

Добавлены две строки в eclipse.ini

Вторая строка представляет местоположение JDK файла javaw.exe.

-vm

C: \ Program Files \ Java \ jdk1.7.0_60 \ bin \ javaw.exe

Примечание: место -vm строк до - vmargs, в противном случае используется местоположение по умолчанию.

Для STS

Измените то же, что указано выше в STS.ini

2
задан Chris 1 March 2019 в 08:54
поделиться

2 ответа

Вы пытались присвоить текущее преобразование свойству, затем изменили это скопированное свойство и затем переназначили представление? что-то вроде:

let originalTransform = view.transform
let scaledTransform = originalTransform.scaledBy(x: 0.2, y: 0.2)
view.transform = scaledTransform

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

0
ответ дан gmogames 1 March 2019 в 08:54
поделиться

Прежде всего, спасибо @gmogames, что нашли время, чтобы предложить свои предложения. Всегда полезно иметь возможность обмениваться идеями !!!

Проблема действительно имела отношение к сбросу точки привязки (или центра) представления перед применением нового преобразования, чтобы анимация работала правильно. Поэтому, используя гораздо более простой пример масштабирования вида после его перемещения , вот как выглядит новый метод:

extension UIView {
    func scaleView(scaleFactor: CGPoint, duration: TimeInterval) {
        // store the view original center
        let oCenter = self.center

        // get the current transformation
        let cTransform = self.transform

        // set the new center of the view 
        self.center = CGPoint(x: self.frame.midX, y: self.frame.midY)

        // clears the transform matrix from potential prior translation
        // Note that you need to take into account potential prior scale of the view into the translation vector!!
        self.transform = self.transform.translatedBy(x: -cTransform.tx / cTransform.a, y: -cTransform.ty / cTransform.d)


        // Animates the transformation
        let animator = UIViewPropertyAnimator(duration: duration, timingParameters: UICubicTimingParameters(controlPoint1: CGPoint(x: 0, y: 0), controlPoint2: CGPoint(x: 1, y: 1))
        animator.addAnimations {
            self.transform = self.transform.scaledBy(x: scaleFactor.x, y: scaleFactor.y)
        }
        // resets the View to its original center and apply the transformation so that the view stays in the right end position
        animator.addCompletion { (position) in
            if position == UIViewAnimatingPosition.end {
                self.center = oCenter
                self.transform = cTransform.scaledBy(x: scaleFactor.x, y: scaleFactor.y)
            }
        }
        animator.startAnimation()
    }
}

Вот результат анимации: move + шкала + шкала + вернуться к оригиналу

enter image description here

0
ответ дан Chris 1 March 2019 в 08:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: