UIViewAnimationWithDuration不尊重持续时间?

时间:2014-09-10 02:37:47

标签: ios xcode uiviewcontroller uiviewanimation

好吧,我几乎是肯定的,我只是在做一些愚蠢的事,但我对此不熟悉,所以请原谅我的无能。我有一个嵌套的动画块,它会在视图控制器完成后更改它 - 一个问题。它过早地发射。我不知道我是否错误地更改了视图控制器,或者块是不正确的。任何帮助都会很棒。提前谢谢。

SplashViewController.m

#import "SplashViewController.h"
#import "MenuViewController.h"

@interface SplashViewController ()

@end

@implementation SplashViewController

-(void) drawColoredBars
{
    UIView *greenBar = [[UIView alloc] initWithFrame:CGRectMake(75.0, -self.view.bounds.size.height, 3.0, self.view.bounds.size.height)];
    UIView *orangeBar = [[UIView alloc] initWithFrame:CGRectMake(87.5, -self.view.bounds.size.height - 25, 3.0, self.view.bounds.size.height)];
    UIView *yellowBar = [[UIView alloc] initWithFrame:CGRectMake(100.0, -self.view.bounds.size.height - 50, 3.0, self.view.bounds.size.height)];

    UIColor *green = [UIColor colorWithRed:142.0/255.0f green:149.0/255.0f blue:31.0/255.0f alpha:0.6f];
    UIColor *orange = [UIColor colorWithRed:204.0/255.0f green:82.0/255.0f blue:29.0/255.0f alpha:0.6f];
    UIColor *yellow = [UIColor colorWithRed:254.0/255.0f green:190.0/255.0f blue:16.0/255.0f alpha:0.6f];

    greenBar.backgroundColor = green;
    orangeBar.backgroundColor = orange;
    yellowBar.backgroundColor = yellow;

    greenBar.tag = 1;
    orangeBar.tag = 2;
    yellowBar.tag = 3;

    [self.view addSubview:greenBar];
    [self.view addSubview:orangeBar];
    [self.view addSubview:yellowBar];
}

-(void) animate
{
    MenuViewController *menu = [[MenuViewController alloc] init];
    double delay = 0.0;
    double x = 75.0;

    for (int i = 1; i < 4; i++) {

        CGRect frame = CGRectMake(x, 0.0, 3.0, self.view.bounds.size.height);

        [UIView animateWithDuration: 2.5
                              delay: delay
                            options: UIViewAnimationOptionCurveEaseIn
                         animations:^{
                             [self.view viewWithTag:i].frame = frame;
                         }
                         completion:^(BOOL finished){
                             [UIView animateWithDuration: 2.5
                                                   delay: 2.5
                                                 options: UIViewAnimationOptionCurveEaseIn
                                              animations:^{
                                                  self.view.alpha = 0.0;
                                              }
                                              completion:^(BOOL finished){
                                                  [self presentViewController:menu animated:NO completion:nil];
                                              }];
                         }];
        delay = delay + 0.5;
        x = x + 12.5;
    }
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    CAGradientLayer *layer = [GradientBackground drawGradient];
    layer.frame = self.view.bounds;
    [self.view.layer insertSublayer:layer atIndex:0];

    [self drawColoredBars];
    [self animate];

}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
}

@end

再一次,谢谢!

1 个答案:

答案 0 :(得分:0)

viewDidLoad方法设置动画还为时过早。请尝试将[self animate]放入viewDidAppear:

另外,请确保[self.view viewWithTag:i]不会返回nil。如果它返回nil,则外部动画块没有任何动画效果,并将立即触发其完成块。