2

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

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

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

Неужели кто-нибудь сделал это раньше, чтобы согласиться предложить совет? Буду признателен!

ответ

1

Аналогичный вопрос задан here.

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

+0

спасибо за подсказку zpasternack - я проверю! –

+0

выглядит так же хорошо, как и он. Ответ принят :-) –

+0

Это может помочь, если вы измените цвет фона вашего главного окна, чтобы его не было белое (возможно, соответствующее цвету вашего приложения) - его немного лучше. – TimM

8

Отредактировано: добавлен еще один вариант с защитой контроллера для 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.

У вас есть полный контроль над анимацией с помощью перехода UIViewControllerFromViewController: toViewController: duration: options: animations: completion :.

+0

Спасибо. Это работало для меня с помощью UINavigationController. Я установил/сбросил свойство скорости в методах делегата (willShow/didShow), чтобы повлиять только на скорость перехода. – cidered

+0

Я думаю, что этот ответ более уместен, чем тот, который выбран. (+1) – Beppe

Смежные вопросы