- (void) hideMenu {
UIView *currentView = [self view];
[UIView beginAnimations:nil context: nil];
[UIView setAnimationDuration: 0.5];
[currentView setFrame:CGRectMake(0, 480, [currentView bounds].size.width, [currentView bounds].size.height)];
[UIView commitAnimations];
self.timer = [NSTimer scheduledTimerWithTimeInterval:(.5)
target:self
selector:@selector(removeAfterAnimate)
userInfo:nil
repeats:NO];
}
- (void) removeAfterAnimate {
[self.view removeFromSuperview];
NSLog(@"removed the view");
}
views:
73answers:
2
+1
Q:
Disappearing my view in a really strange way using animation and a timer. How can I improve this?
A:
Shouldn't you put the removeFromSuperview inside the animation block? Don't you want to animate it rotating away or whatever. And nothing will happen right now because you didn't set
[UIView setAnimationTranstion:(ex. UIViewAnimationTransitonFlipFromRight) forView:(ex. self.view) cache:YES];
Mk12
2009-08-05 21:38:26
+2
A:
It would be helpful to better explain "a really strange way" here. It looks like your goal is to move currentView to a particular place and then have your view vanish? Did you mean to use self.view or currentView in both cases?
Don't use an NSTimer here. NSTimers aren't appropriate for animations. Use +setAnimationDidStopSelector:
. Something like this:
- (void) hideMenu {
UIView *currentView = [self view];
[UIView beginAnimations:@"hideMenu" context:currentView];
[UIView setAnimationDuration: 0.5];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
[currentView setFrame:CGRectMake(0, 480, [currentView bounds].size.width, [currentView bounds].size.height)];
[UIView commitAnimations];
}
- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
[self.view removeFromSuperview];
NSLog(@"removed the view");
}
Rob Napier
2009-08-05 21:45:18