iOS - Анимация изменения размера текста в UILabel или UITextView? - PullRequest
8 голосов
/ 31 июля 2010

В приложении, отображающем фрагменты текста, у меня увеличивается размер шрифта, когда устройство поворачивается в альбомную ориентацию. Мне не нравится, как он выполняет всю анимацию, а затем внезапно переходит к новому размеру, поэтому я хотел бы анимировать изменение размера по ходу вращения.

Я где-то читал, что выбрасывание этого изменения в UIView блок анимации не работает, потому что свойство font не является анимируемым, так какие у меня есть варианты для этого?

Для моей конкретной реализации я не просто масштабирую UILabel / UITextView как есть; Границы рамки увеличиваются больше (пропорционально), чем размер шрифта, поэтому в тексте будет повторный поток. Это нормально для меня.

Редактировать: Я был бы в порядке с простым масштабированием UITextView.

Кроме того, я подумывал «оживить» его вручную: у меня есть метод, который выкладывает мои виды и корректирует размер шрифта. Если бы я знал, когда вращение должно было начаться, и продолжительности анимации, я мог бы рассчитать его так, чтобы он отображал промежуточный размер шрифта или два в середине анимации. Буду признателен за любую помощь в получении этих.

Ответы [ 4 ]

6 голосов
/ 17 марта 2011

Если бы я знал, когда вращение было около для начала, и продолжительность анимация ...

Забавно, что ты об этом упомянул. Непосредственно перед запуском анимации ваш контроллер представления получит сообщение willAnimateRotationToInterfaceOrientation:duration:, которое даст вам точную информацию, которая вам нужна.

6 голосов
/ 15 марта 2011

Один из вариантов - вывести старый текст, изменить размер шрифта и вернуть его обратно. Свойство font может быть не анимируемым, но альфа - это. Поскольку alpha является свойством UIView, вы можете обрабатывать все текстовые представления одинаково: UILabel, UITextView и т. Д. Это тоже хорошо выглядит.

4 голосов
/ 16 марта 2011

Чтобы продолжить, можно:

  1. Создать CAKeyframeAnimation
  2. Определить масштабирование и поворот, которые вы хотите добиться во время этой анимации, используя набор объектов CATransform3D
  3. Добавьте эти преобразования к анимации с ключевыми кадрами.
  4. Отправьте сообщение 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"];

Это, как правило, анимированный текст, например, для анимации.

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

Вам понадобится настройка, чтобы найти правильное время и вращение.

1 голос
/ 31 июля 2010

Изменение размера шрифта при вызове didAnimateFirstHalfOfRotationToInterfaceOrientation:. Таким образом, пользователь не увидит изменения после завершения вращения. Было бы довольно трудно увидеть изменение размера шрифта тогда, когда происходит вращение!

...