Могу ли я увеличить скорость анимации presentModalViewController? - PullRequest
2 голосов
/ 29 июня 2009

Я пишу приложение для рисования, которое показывает контроллер вида инструментов, когда пользователь щелкает элемент на панели инструментов. Тем не менее, некоторые из моих бета-тестеров сообщили, что инструменты открываются слишком медленно. Я использую стандартный presentModalViewController: animated: call для отображения инструментов, и я попытался обернуть его в блок кода, подобный этому, чтобы ускорить его:

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration: 0.1];
[self presentModalViewController:settings animated:YES];
[UIView commitAnimations];

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

Кто-нибудь делал это до того, что хотел бы дать совет? Буду признателен за это!

Ответы [ 2 ]

10 голосов
/ 15 марта 2012

Отредактировано: добавлена ​​еще одна опция с защитой контроллера для iOS 5 и более поздних версий.

Другое решение - установить временное пространство слоя.

Это делается через свойство скорости CALayer. Чтобы замедлить анимацию, можно использовать:

MytransparentVCViewController *vc = [[MytransparentVCViewController alloc] initWithNibName:@"MytransparentVCViewController" bundle:nil];
// Makes all animations 10 times slower
// To speed it up, set it to multiples of 1: 2 is 2 times faster, 3 is 3 times faster etc
vc.view.layer.speed = 0.1; 
[self presentModalViewController:vc animated:YES];

Обратите внимание, что предлагаемое решение в связанном посте не будет работать, если ваша цель - изменить скорость анимации контроллера модального представления, который вы собираетесь представить (например, если вы используете UIModalTransitionStyleCoverVertical).

Скорость слоя - это не абсолютное значение, а функция родительского временного пространства этого слоя (если, конечно, слой не находится в корне иерархии слоев). Например, если вы установите скорость слоя равной 2, его анимация будет выполняться в два раза быстрее по сравнению с анимацией родительского слоя.

Еще одним вариантом является использование содержимого контроллера представления. (только iOS 5 и более поздние версии)

http://developer.apple.com/library/ios/DOCUMENTATION/UIKit/Reference/UIViewController_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40006926-CH3-SW81.

У вас есть полный контроль над анимацией с помощью transitionFromViewController от UIViewController: toViewController: продолжительность: опции: анимации: завершение:.

1 голос
/ 29 июня 2009

Аналогичный вопрос задается здесь .

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

...