Могу ли я увеличить скорость анимации presentModalViewController?
-
20-08-2019 - |
Вопрос
Я пишу приложение для рисования, которое показывает контроллер представления инструментов, когда пользователь щелкает элемент на панели инструментов.Однако несколько моих бета-тестеров сообщили, что панель инструментов открывается слишком медленно.Я использую стандартный presentModalViewController: анимированный:вызовите, чтобы отобразить инструменты, и я попытался обернуть его в блок кода, подобный этому, чтобы ускорить его:
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration: 0.1];
[self presentModalViewController:settings animated:YES];
[UIView commitAnimations];
К сожалению, это не работает.Если вы скажете animated:НЕТ, это работает лучше, но базовый вид холста для рисования немедленно удаляется (поскольку контроллер считает, что он больше не виден), и поэтому анимация выполняется на белом фоне.
Делал ли кто-нибудь это раньше, кто был бы готов дать какой-нибудь совет?Я был бы вам очень признателен!
Решение
Задается аналогичный вопрос здесь.
Вы также можете изменить скорость, используя эту технику, но в моем эксперименте это делается на пустом фоне, как вы и предлагали.
Другие советы
Отредактированный:добавлена еще одна опция с локализацией контроллера для iOS 5 и более поздних версий.
Другое решение состоит в том, чтобы задать временной интервал слоя.
Это делается с помощью свойства speed 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 и более поздних версий)
У вас есть полный контроль над анимацией с помощью UIViewController transitionFromViewController:toiewcontroller:продолжительность: параметры:анимация:завершение:.