Перемещайте CGAffineTransformScale в масштабе, а не в масштабе
Допустим, я масштабирую UILabel, используя CGAffineTransformScale, примерно так:
let scale = 0.5
text = UILabel(frame: CGRectMake(100, 100, 100, 100))
text.text = "Test"
UIView.animateWithDuration(2.0, delay: 0.0, options: UIViewAnimationOptions.CurveEaseIn, animations: {
self.text.transform = CGAffineTransformScale(self.text.transform, scale, scale)
}, completion: {(value : Bool) in
print("Animation finished")
})
Это прекрасно работает, когда я хочу увеличить UILabel наполовину. Но если бы мне пришлось снова вызывать этот же код, он получился бы со шкалой 0,25, так как он снова масштабируется наполовину.
Можно ли будет использовать CGAffineTransformScale, чтобы всегда масштабировать до размера, равного половине исходного кадра UILabel, вместо кумулятивного масштабирования?
3 ответа
Решение
Свифт 3:
text.transform = CGAffineTransform.identity
UIView.animate(withDuration: 0.25, animations: {
self.text.transform = CGAffineTransform(scaleX: scale, y: scale)
})
Вы масштабируете существующее преобразование. Просто создайте новое преобразование:
self.text.transform = CGAffineTransformMakeScale(scale, scale)
Быстрая версия:
self.text.transform = CGAffineTransform.init(scaleX: scaleFactorX, y: scaleFactorY)