У меня есть UIView
с именем activityView
, который содержит два подпредставления activityIndicator
и cancelOperationsButton
. Эти представления встроены в XIB и подключены к моему контроллеру представления.
У меня есть два способа активировать (показать) и деактивировать (скрыть) эти два подпредставления:
- (void) enableActivityIndicator {
[activityIndicator startAnimating];
[cancelOperationsButton setHidden:NO];
}
- (void) disableActivityIndicator {
[activityIndicator stopAnimating];
[cancelOperationsButton setHidden:YES];
}
Сами по себе эти два метода работают нормально.
Чтобы придать этому немного блеска, я бы хотел добавить анимацию, которая затухает в этих подпредставлениях:
- (void) enableActivityIndicator {
[activityIndicator startAnimating];
[cancelOperationsButton setHidden:NO];
[UIView beginAnimations:@"fadeIn" context:nil];
[UIView setAnimationDelay:0.0f];
[UIView setAnimationDuration:1.0f];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
activityView.alpha = 1.0f;
[UIView commitAnimations];
}
- (void) disableActivityIndicator {
[UIView beginAnimations:@"fadeOut" context:nil];
[UIView setAnimationDelay:0.0f];
[UIView setAnimationDuration:1.0f];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
activityView.alpha = 0.0f;
[UIView commitAnimations];
[activityIndicator stopAnimating];
[cancelOperationsButton setHidden:YES];
}
Но анимация не работает - подпредставления просто появляются или исчезают без свойства alpha
родительского представления, влияющего на прозрачность.
Как мне написать эти методы, чтобы получить эффект постепенного появления, постепенного исчезновения, к которому я стремлюсь?
EDIT
Вот схема, которая отлично работает:
- (void) enableActivityIndicator {
activityView.alpha = 0.0f;
[activityIndicator startAnimating];
[cancelOperationsButton setHidden:NO];
[UIView beginAnimations:@"fadeIn" context:nil];
[UIView setAnimationDelay:0.0f];
[UIView setAnimationDuration:0.2f];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
activityView.alpha = 1.0f;
[UIView commitAnimations];
}
- (void) disableActivityIndicator {
[UIView beginAnimations:@"fadeOut" context:nil];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(disableActivityIndicatorComplete)];
[UIView setAnimationDelay:0.0f];
[UIView setAnimationDuration:0.2f];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
activityView.alpha = 0.0f;
[UIView commitAnimations];
}
- (void) disableActivityIndicatorComplete {
[activityIndicator stopAnimating];
[cancelOperationsButton setHidden:YES];
}