viewDidAppear中动画的奇怪行为

时间:2014-04-23 13:28:17

标签: ios uiviewanimation viewdidappear

我正在我的应用程序中对viewDidApepar中的动画方法进行简单调用,在故事板中动画的视图的初始位置是(10,5) - 几乎从主视图中隐藏。

-(void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    [self doTheAnimation];    
}

,方法包含

[UIView animateWithDuration:0.8f delay:0.0f usingSpringWithDamping:0.5f initialSpringVelocity:1.0f options:UIViewAnimationOptionBeginFromCurrentState animations:^{
     [plotView setFrame:CGRectMake(10, 40, 299, 130)];
} completion:nil];

问题:当应用程序启动时 - 一切都很好用一个很酷的" spring"效果,但当我推到另一个视图并返回到主视图时,调用带有动画的方法,LOG显示plotView已将frame.origin更改为(10,40)但它仍然停留在(10) ,5)它在故事板上的初始位置。

3 个答案:

答案 0 :(得分:1)

替换

-(void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    [self doTheAnimation];    
}

-(void) viewDidLayoutSubviews{
    [super viewDidLayoutSubviews];
    [self doTheAnimation];    
}

答案 1 :(得分:1)

请勿更改方法的位置,只需添加以下内容:

[plotView setFrame:CGRectMake(10, 5, 299, 130)];
[UIView animateWithDuration:0.8f delay:0.0f usingSpringWithDamping:0.5f initialSpringVelocity:1.0f options:UIViewAnimationOptionBeginFromCurrentState animations:^{
    [plotView setFrame:CGRectMake(10, 40, 299, 130)];
} completion:^{
    [plotView setFrame:CGRectMake(10, 40, 299, 130)];
}];

告诉我它是否有效:)

答案 2 :(得分:0)

更好的是:

[self performSelector:@selector(doTheAnimation) withObject:nil afterDelay:0.5];

根据需要设置延迟。