Как я могу скопировать мусорную анимацию Mail.app - PullRequest
38 голосов
/ 09 января 2009

В моем приложении для iPhone я поместил UIBarBUtton типа UIBarButtonSystemItemTrash в свой UIToolBar. При нажатии я хотел бы воспроизвести анимацию Mail.app: корзина открывается, UIView складывается и вылетает в нее.
Есть ли способ получить доступ к этой анимации через iPhone SDK?

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

Приветствия
Davide

Ответы [ 4 ]

35 голосов
/ 10 января 2009

Используйте тип suckEffect для анимации. Также: spewEffect, genieEffect, unGenieEffect, твист, труба, водоворот, CameraIris, cameraIrisHollowClose, cameraIrisHollowOpen, rippleEffect, charminUltra, zoomyIn и zoomyOut Не работает в симуляторе.

CATransition *animation = [CATransition animation];
animation.type = @"suckEffect";
animation.duration = 2.0f;
animation.timingFunction = UIViewAnimationCurveEaseInOut;
view.opacity = 1.0f;
[view.layer addAnimation:animation forKey:@"transitionViewAnimation"];

Примечание. Фрагмент кода был извлечен из большой кодовой базы. Я надеюсь, что это работает:)

11 голосов
/ 09 января 2010

Просто чтобы добавить информацию:

  1. Вы можете использовать «suckEffect» со стандартом +[UIView setAnimationTransition:forView:cache:]. Просто передайте число 103 в переменную animationTransition . Это не предотвратит отклонение вашего приложения Apple: p
  2. «spewEffect», «genieEffect», «unGenieEffect» и т. Д. Больше не существуют в iPhoneOS 3.x. Единственный недокументированный переход - «cube» (-), «rippleEffect» (110), три эффекта «cameraIris» (105,106,107) и «suckEffect» (103).

Подробнее см. http://www.iphonedevwiki.net/index.php?title=UIViewAnimationState.

Также для анимации корзины (с частным API): http://www.iphonedevwiki.net/index.php?title=UIToolbar#Animating_the_trash_can_icon.

10 голосов
/ 09 января 2009

К сожалению, я думаю, что это должна быть полностью индивидуальная анимация. Сворачивание UIView может быть аппроксимировано с использованием Core Animation, возможно, путем добавления перспективы к CATransform3D нижележащего слоя UIView, чтобы исказить UIView в трапецию, которая засасывается в мусорную корзину.

Что касается мусорной корзины, вы можете создать UIBarButtonItem с помощью initWithCustomView:, который может позволить вам вставить пользовательский UIView, который имеет анимируемую корзину. Похоже, мусорное ведро имеет два элемента, основание банки и крышку, которые вращаются независимо, чтобы открывать и закрывать банку. Нарисуйте PNG для обоих, создайте для них UIImageViews и сделайте их подпредставлениями пользовательского представления UIBarButtonItem. Для открытия и закрытия примените к ним вращательные преобразования для анимации подпредставлений.

4 голосов
/ 28 декабря 2012

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

CGRect endRect = CGRectMake(30, 40, 50, 60);
[view genieInTransitionWithDuration:0.7 
                    destinationRect:endRect 
                    destinationEdge:BCRectEdgeTop 
                         completion:^{
                            NSLog(@"I'm done!");
                          }];

Genie IN

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