iOS-анимация изменения размера текста в UILabel или UITextView?
в приложении, показывающем куски текста, у меня увеличивается размер шрифта, когда устройство повернуто к альбомной ориентации. Мне не нравится, как он делает всю анимацию, а затем внезапно переходит на новый размер, поэтому я хотел бы анимировать изменение размера в течение вращения.
Я где-то читал, что бросать это изменение в UIView
блок анимации не работает, потому что свойство font не является анимируемым, так что мои варианты действий это?
для моей конкретной реализации я не просто масштабировать UILabel
/UITextView
как есть; границы поля увеличиваются больше (пропорционально), чем размер шрифта, поэтому в тексте будет повторный поток. Меня это устраивает.
Edit: я был бы в порядке с простым масштабированием UITextView
.
кроме того, я рассматривал "анимацию" вручную: у меня есть метод, который излагает мои представления и настраивает размер шрифта. Если бы я знал, когда начнется ротация, и продолжительность анимации, я мог бы время, чтобы он отображает промежуточный размер шрифта или два в середине анимации. Любая помощь в их получении будет оценена по достоинству.
4 ответов
Если бы я знал, когда вращение было около для начала, и продолжительность анимация...
забавно, что вы должны упомянуть об этом. Непосредственно перед началом анимации ваш контроллер Вида получит willAnimateRotationToInterfaceOrientation:duration:
сообщение, которое дает вам точную информацию, вам нужно.
один из вариантов-выцветание старого текста, изменение размера шрифта и его выцветание. Свойство font может не быть анимируемым, но alpha является. Поскольку alpha является свойством UIView, вы можете обрабатывать все ваши текстовые представления одинаково: UILabel, UITextView и т. д. И выглядит неплохо.
способ продолжить может быть:
- создать CAKeyframeAnimation
- определите масштабирование и вращение, которые вы хотите достичь во время этой анимации, используя набор объектов CATransform3D
- добавить эти преобразования, чтобы ваши ключевые кадры анимации
- отправить
addAnimation
сообщение объекту слоя надписи:[[label layer] addAnimation]
;
здесь будет образец кода, предполагающий yourLabel
- это UILabel
вы хотите масштабировать и поворот:
CAKeyframeAnimation *scale = [CAKeyframeAnimation animationWithKeyPath:@"transform"];
CATransform3D scaleUp = CATransform3DMakeScale(1.5, 1.5, 1); // Scale in x and y
CATransform3D rotationScaled = CATransform3DRotate (scaleUp, 90, 0, 0, 1); // Rotate the scaled font
[scale setValues:[NSArray arrayWithObjects:
[NSValue valueWithCATransform3D:CATransform3DIdentity],
[NSValue valueWithCATransform3D:rotationScaled],
nil]];
// set the duration
[scale setDuration: 1.0];
// animate your label layer
[[yourLabel layer] addAnimation:scale forKey:@"scaleText"];
это, как правило, как текст подпрыгивая вокруг будет анимирован, например.
вы можете запустить это, когда устройство начнет вращаться, и получить анимацию, когда она будет вращаться, чтобы вы могли обновить свою метку с правильным масштабом/положением.
вам понадобится настройка, чтобы найти правильное время и вращение.
изменить размер шрифта при didAnimateFirstHalfOfRotationToInterfaceOrientation:
называется.
Таким образом, пользователь не увидит изменения после завершения вращения. Было бы довольно сложно увидеть изменение размера шрифта, так как происходит вращение!