我正在我的应用程序中对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)它在故事板上的初始位置。
答案 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];
根据需要设置延迟。