My Core Animation block isn't working like I'd expect
I have a UIView
called activityView
, which contains two subviews activityIndicator
and cancelOperationsButton
. These views are embedded in a XIB and wired up to my view controller.
I have two methods that deal with activating (showing) and deactivating (hiding) these two subviews:
- (void) enableActivityIndicator {
[activityIndicator startAnimating];
[cancelOperationsButton setHidden:NO];
}
- (void) disableActivityIndicator {
[activityIndicator stopAnimating];
[cancelOperationsButton setHidden:YES];
}
By themselves, these two methods work fine.
To give this a bit of polish, I'd like to add an animation that fades these subviews in and out:
- (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];
}
But the animations are not working — the subviews just show up or disappear without the parent view's alpha
property having an effect on transparency.
How should I write these methods to get the fade-in, fade-out effect I am after?
EDIT
Here's an arrangement that works perfectly:
- (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 sto开发者_Go百科pAnimating];
[cancelOperationsButton setHidden:YES];
}
In enable, set the view to clear before animating to opaque.
- (void) enableActivityIndicator {
...
activityView.alpha = 0.0f;
[cancelOperationsButton setHidden:NO];
...
In disable, do not hide the view until after the animation completes.
- (void) disableActivityIndicator {
...
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(hideComplete)];
...
- (void) hideComplete {
[activityIndicator stopAnimating];
[cancelOperationsButton setHidden:YES];
}
精彩评论