removeFromSuperview с анимацией и управлением представлениями - PullRequest
4 голосов
/ 26 июля 2011

Я немного покопался по этому поводу, но, похоже, ничего не отвечает на мой конкретный вопрос (даже не такой: Можно ли удалить FromSuperview с анимацией? ).

По сути, мойПриложение запускается с экрана приветствия, на котором пользователь нажимает кнопку «Войти», затем переходит к представлению входа, а затем к представлению панели вкладок, которое является фактическим приложением.

То, как я это сделал, я написал собственный класс - TabBarController, который устанавливает все вкладки и соответствующие им контроллеры представления.Теперь, когда пользователь нажимает «войти», я вызываю removeFromSuperview и представляю панель вкладок.

Я пытаюсь найти способ анимировать переход от страницы входа на панель вкладок.Я попробовал некоторые предлагаемые решения где-то здесь, но ни один, кажется, не делает работу.Вот мой код в контроллере вида signin.mЯ рассчитываю оживить текущее представление (в идеале, не просто затухание, а более интересные вещи, такие как сальто и т. Д.).

//when done signing in --> go to the tab bar view 
-(IBAction)done:(id)sender {

TabBarController  *tabController = [[TabBarController alloc] init];
[UIView beginAnimations:@"removeWithEffect" context:nil];
[UIView setAnimationDuration:4.0];
self.parentViewController.view.frame = CGRectMake(0,0,320,480);
self.parentViewController.view.alpha = 1.0f;
[UIView commitAnimations];
[self.parentViewController.view performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:2.5f];
[self presentModalViewController:tabController animated:YES];

}

Цените любую помощь!

Ответы [ 2 ]

11 голосов
/ 26 июля 2011

Это не может работать таким образом. presentModalViewController отключает представление viewController поверх собственного представления. Он не заменит исходный viewController (self). Поскольку вы удаляете self.parentViewController.view из иерархии представлений, он не может представить ваш tabController модально, поскольку вы удалили self.

Во всяком случае, я бы порекомендовал вам еще один способ для достижения вашего макета представления: Создайте tabBarViewController и добавьте его представление в rootView (self.window в делегате приложения или что вы используете сейчас). Затем добавьте свой логин-вид в тот же вид. Из-за иерархии представлений, login-view будет отображаться над tabBar.view. И кнопка готово должна быть реализована следующим образом: (я использую синтаксис блока для анимации, как это должно быть)

-(IBAction)done:(id)sender {
    [UIView animateWithDuration:1.0 
                     animations:^{
                         self.view.frame = CGRectMake(0, 480, 320, 480);
                         self.view.alpha = 0.0
                     } 
                     completion:^(BOOL finished){
                         [self.view removeFromSuperView];
                     }
     ];
}

Вы можете анимировать больше вещей, чем просто альфа, размер или положение. Просто взгляните на анимацию в документации . Я думаю, вам будет интересно использовать view.transform для создания анимации. ;)

1 голос
/ 26 июля 2011

Вот как вы должны удалить вид после его анимации.

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0];
[UIView setAnimationDelay:2.0];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDelegate:myView];
[UIView setAnimationDidStopSelector:@selector(removeFromSuperview)];

[UIView commitAnimations];

Надеюсь, это поможет.Удачного кодирования.

...