как динамически ускорить анимацию в iPhone - PullRequest
2 голосов
/ 14 декабря 2009

Я новичок в объективном кодировании в iPhone. Я использую приведенный ниже код для анимации изображения в течение 40 секунд

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:40.0];
object.transform = CGAffineTransformMakeRotation(1.57);
[UIView commitAnimations];

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

Ответы [ 3 ]

2 голосов
/ 14 декабря 2009

Вы не сможете сделать это с

[UIView beginAnimations:nil context:nil];

конструкция. Взгляните на основные рамки анимации:

http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/CoreAnimation_guide/Articles/AnimatingLayers.html#//apple_ref/doc/uid/TP40006085-SW1

То, что вы хотите сделать, это серия анимаций с помощью клавиш, если я правильно помню

0 голосов
/ 15 декабря 2009

Вам нужно использовать Core Animation на слое вида вместо использования прокси-анимации UIView. CAKeyframeAnimation позволит вам создавать ключевые кадры для вашей анимации и определять ключевые моменты времени (свойство keyTimes в классе CAKeyframeAnimation), которые определяют, сколько времени должно пройти между ключевыми кадрами.

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

Из документов:

keyTimes

Необязательный массив объектов NSNumber которые определяют продолжительность каждого сегмент ключевого кадра.

@ property (copy) NSArray * keyTimes

Обсуждение

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

Соответствующие значения в keyTimes массив зависит от свойство analysisMode.

Если для параметра CalculationMode установлено значение kCAAnimationLinear, первое значение в массив должен быть 0.0 и последний значение должно быть 1,0. Значения интерполируется между указанным keytimes.

Если для режима расчета установлено значение kCAAnimationDiscrete, первое значение в массиве должно быть 0.0.

Если для параметра CalculationMode установлено значение kCAAnimationPaced, массив keyTimes игнорируется.

Если значения в массиве keyTimes являются недействительными или неуместными для ПодсчетМод, массив keyTimes игнорироваться.

С уважением.

0 голосов
/ 15 декабря 2009

Попробуйте [UIView setAnimationCurve:]. UIViewAnimationCurveEaseIn может сделать это за вас.

Если вам действительно нужен точный контроль - «x скорость в течение 10 секунд, а затем y скорость в течение 30 секунд» - самый простой способ - две анимации, вторая начинается сразу после завершения первой. Настройте делегата для получения обратного вызова после завершения первой анимации, и вы можете сразу запустить вторую анимацию. (Я использовал это раньше для реализации «отскока», когда представление анимируется вверх, затем вниз.) Может быть проще, чем пытаться сделать анимацию всего ключевого кадра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...