Преобразовать размер шрифта метки - PullRequest
2 голосов
/ 31 января 2020

У меня есть два ярлыка. Каждый из них имеет начальные свойства, такие как размер шрифта и непрозрачность. Перед анимацией значения равны

labelOne.font = labelOne.font.withSize(109)
labelOne.alpha = 1.0

labelTwo.font = labelTwo.font.withSize(40)
labelTwo.alpha = 0.7

. После анимации они должны иметь следующие свойства:

labelOne.font = labelOne.font.withSize(40)
labelOne.alpha = 0.7

labelTwo.font = labelTwo.font.withSize(109)
labelTwo.alpha = 1.0

. Для преобразования я использую CGAffineTransform() пример:

labelOne.transform = CGAffineTransform(scaleX: //some value? , y: //someValue?)

Но я новичок в программировании и не совсем понимаю, как это работает. Подскажите, как написать эту анимацию с изменением размера шрифта?

1 Ответ

2 голосов
/ 31 января 2020

Чтобы добиться анимации на обеих метках, как вы хотели, контролируя размер шрифта и альфа, вы можете добиться этого следующим образом:

// Before animation
labelOne.font = labelOne.font.withSize(109)
labelOne.alpha = 1.0

labelTwo.font = labelTwo.font.withSize(40)
labelTwo.alpha = 0.7
UIView.animate(withDuration: 1, animations: {
    // This will be values set during the animation of 1 second
    self.labelOne.font = labelOne.font.withSize(40)
    self.labelOne.alpha = 0.7

    self.labelTwo.font = labelTwo.font.withSize(109)
    self.labelTwo.alpha = 1.0
})

Между тем, CGAffineTransform(scaleX:, y:) позволяет масштабировать координаты X, Y значение вашего представления (например, labelOne), но чтобы это произошло с анимацией, вы должны поместить это в блок анимации:

// normal state
labelOne.transform = CGAffineTransform(scaleX: 1, y: 1)
labelTwo.transform = CGAffineTransform(scaleX: 0.7, y: 0.7)
UIView.animate(withDuration: 1, animations: {
    // State reached through the animation
    labelOne.transform = CGAffineTransform(scaleX: 0.7, y: 0.7)
    labelTwo.transform = CGAffineTransform(scaleX: 1, y: 1)
})

Чтобы добиться более плавного перехода, используйте:

UIView.transition(with: labelOne, duration: 0.25, options: .transitionCrossDissolve, animations: {
    self.labelOne.font = UIFont.systemFont(ofSize: 40)
}) { _ in }
...