简体   繁体   中英

UIView Animation slide in

I am trying to get my UIView to slide in from the right in the viewDidLoad method here's what I've got.

CGRect menuFrame = self.menu.frame;
menuFrame.origin.y = menuFrame.size.height+200;

[UIView animateWithDuration:1
                      delay:0.05
                    options: UIViewAnimationCurveEaseIn
                 animations:^{
                     self.menu.frame = menuFrame;
                 }
                 completion:^(BOOL finished){
                     NSLog(@"Animation Complete!");

                 }];

I am not sure what has gone wrong here I appreciate any help greatly.

This isn't what you asked, but it is worth saying anyway: viewDidLoad is a bad place for this code. viewDidLoad is called because the view controller has obtained its view, not because that view has appeared or will soon appear in the interface. It might soon appear in the interface, which is why your code has seemed to work up until now, but it might not.

The correct place for this code is probably viewWillAppear or viewDidAppear . You probably want to call this code only once, though, the first time the view appears. If you want to prevent the code from being called, because you've already animated menu into view on an earlier viewDidAppear call, simply include a conditional check to see whether menu already has a frame within the visible view.

By the way, another reason for avoiding things having to do with frames and bounds in viewDidLoad is that if your app launches into landscape and this is your root view, x and y are reversed.

It looks like you are trying to slide your menu in from the bottom as the Y position is pushed down initially by 200.

Usually you start by adding the view as a subview in its offscreen position and then set the onscreen position in the animation block.

And, make sure that you pass 1.0 as the animation duration.

use those transition.subtype for different effects

CATransition* transition = [CATransition animation];  
transition.duration = 0.5;  
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];  
transition.subtype = kCATransitionFromLeft; //kCATransitionMoveIn; //, kCATransitionPush, kCATransitionReveal, kCATransitionFade
//transition.subtype = kCATransitionFromTop; //kCATransitionFromLeft, kCATransitionFromRight, kCATransitionFromTop, kCATransitionFromBottom

[appDelegate.navigation.view.layer addAnimation:transition forKey:nil];
viewController *DairyVC = [[viewController alloc] initWithNibName:@"viewController" bundle:nil];

[appDelegate.navigation pushViewController:DairyVC animated:YES];

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM