анимация скрытия / показа UIView по примеру Apple - PullRequest
0 голосов
/ 09 ноября 2011

Я пытаюсь сделать простую анимацию. У меня есть UIViewController, который имеет два представления, которые являются подпредставлениями основного представления. (В Интерфейсном Разработчике я создал два объекта UIView, оба имеют свое собственное подпредставление представления, которое автоматически создается в .xib из шаблона UIViewController). У меня есть второй вид, скрытый в IB. Контроллер представления представлен модально как UIModalPresentationFormSheet. Когда кнопка нажата, я хочу скрыть первый вид, перейти ко второму виду. Я попробовал следующий пример Apple здесь: http://developer.apple.com/library/ios/#samplecode/ViewTransitions/Listings/Classes_ViewTransitionsAppDelegate_m.html#//apple_ref/doc/uid/DTS40007411-Classes_ViewTransitionsAppDelegate_m-DontLinkElementID_4

Вот мой код при нажатии кнопки:

    CATransition *transition = [CATransition animation];
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    transition.duration = 0.75;
    transition.type = kCATransitionReveal;
    [self.view.layer addAnimation:transition forKey:nil];
    self.FirstScreen.hidden = YES;
    self.SecondScreen.hidden = NO;

К сожалению, я не получаю никакой анимации. Я получаю скрытие / отображение, которое хочу, но без анимации перехода. Итак, мой первый вопрос: что я делаю не так в коде?

Дополнительный вопрос: можно ли сделать что-то подобное с блоками? Я сделал несколько простых анимаций в блоках, таких как изменение альфа с помощью

[UIView animationWithDuration... ]

Но не был уверен, как сделать вышеуказанный переход с блоками.

1 Ответ

1 голос
/ 09 ноября 2011

Вместо анимации hidden свойство пытается анимировать:

self.FirstScreen.alpha = 0.0;
self.SecondScreen.alpha = 1.0;

или

self.FirstScreen.layer.opacity = 0.0;
self.SecondScreen.layer.opacity = 1.0;

отсюда - Ссылка на класс UIView

Следующие свойства класса UIView являются анимируемыми:

@property frame   
@property bounds   
@property center  
@property transform   
@property alpha   
@property backgroundColor   
@property contentStretch

Другое решение:

[UIView animateWithDuration:0.75 delay:0 
                 options:UIViewAnimationOptionCurveEaseInOut
                     animations:^{
                         self.FirstScreen.alpha = 0.0;
                         self.SecondScreen.alpha = 1.0; 
                     }
                     completion:nil];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...