Справка по появлению и исчезновению вложенного представления

#iphone #objective-c #cocoa-touch #uiview

#iPhone #objective-c #cocoa-touch #uiview

Вопрос:

У меня возникла проблема с исчезновением моего вложенного представления. У меня нет проблем с затуханием представления, но оно исчезает .. просто отбрасывает представление.

 -(void)flipToReview {
ReviewViewController *reviewVariable = [[ReviewViewController alloc] initWithNibName:@"ReviewViewController" bundle:nil];
[self setReviewViewController:reviewVariable];
self.ReviewViewController.view.alpha =0;
[UIView beginAnimations:@"flipview" context:nil]; 
[UIView setAnimationDuration:0.3];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
[UIView setAnimationTransition:UIViewAnimationTransitionNone forView:_window cache:YES];
[reviewVariable release];    
[self.window addSubview:self.ReviewViewController.view];
self.ReviewViewController.view.alpha =1;

[UIView commitAnimations];
}


-(void)flipBackFromReview {
//   self.ReviewViewController.view.alpha = 1;

[UIView beginAnimations:@"trip" context:nil]; 
[UIView setAnimationDuration:0.3];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];

[UIView setAnimationTransition:UIViewAnimationTransitionNone forView:_window cache:NO];
self.ReviewViewController.view.alpha = 0;
[self.ReviewViewController.view removeFromSuperview];
[UIView commitAnimations];
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
[self.ReviewViewController.view setHidden:1];
NSLog(@"remove subview"); 
}
  

Ответ №1:

Попробуйте следующее:

 [UIView animateWithDuration:3.0 delay:0.0
                    options:UIViewAnimationOptionAllowUserInteraction
                 animations:^{ ReviewViewController.view.alpha = 0.0;}
                 completion:^(BOOL fin) {
                 if (fin) [ReviewViewController.view removeFromSuperview];
                 }];
  

Комментарии:

1. Это блоки. Блоки — это, по сути, фрагменты кода, с которыми можно работать в специальных целях (например, при многозадачности). Загляните в ресурсы разработчика от Apple!

2. Я действительно должен поддержать это, поскольку ваш ответ определенно лучше, чем принятый.

3. Привет.. Я сделал это, и это отлично работает. Но поскольку я не совсем понимаю, что здесь происходит. Добавляете ли вы это после фиксации в другом стиле, чтобы удалить представление, когда это будет сделано? Или это приводит к полному затуханию и всему остальному?

Ответ №2:

Вам нужно переместить:

 [self.ReviewViewController.view removeFromSuperview];
  

Это невозможно сделать «со временем» в анимации. Что вы хотите сделать, так это переместить это в селектор и использовать setAnimationDelegate и setAnimationDidStopSelector . Поместите следующее в свой блок анимации:

 [UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(finshedFadeOut)];
  

Затем выполните следующий метод:

 - (void)finshedFadeOut {
    [self.ReviewViewController.view removeFromSuperview];
}
  

Ответ №3:

У меня тоже была эта проблема, способ, которым я ее обошел, заключался в изменении альфа-символа на 0 вместо простого удаления представления. Это можно анимировать.

Комментарии:

1. @Джулиан Поскольку я не могу напрямую прокомментировать ответ Джулиана, я сделаю это здесь. Что означают эти символы ^ в вашем коде?