我有以下例程来简单地在屏幕上为图像设置动画。
-(void)animateGrasland {
[UIView animateWithDuration:5 delay:0.0 options:UIViewAnimationOptionCurveLinear
animations:^{
CGRect newFrame = CGRectMake(100,100,1024,768);
self.grasland.frame = newFrame;
}
completion:^(BOOL finished) {
}
];
}
我想在加载View后立即启动动画。并持续5秒。所以我一直在尝试调用函数的几个选项。
选项I - 此选项会立即在新位置显示图像,无动画!
- (void)viewDidLoad {
[super viewDidLoad];
[self animateGrasland];
}
选项II - 此选项将图像设置为新位置的动画。答对了。
- (void)viewDidLoad {
[super viewDidLoad];
[NSTimer scheduledTimerWithTimeInterval:0.001 target:self selector:@selector(animateGrasland) userInfo:nil repeats:NO];
}
我有时间在时间中延迟播放,动画将以0.001秒开始播放。如果持续时间为0.0001秒,则图像立即显示在新位置,因此没有动画。我希望解析viewDidLoad(以及其他后台例程)的持续时间会导致这种情况。
因为在storyDidLoad期间更新了故事板中设置的初始位置(0,0),所以不会触发动画。并且动画立即移动到完成状态。
答案 0 :(得分:0)
尝试在animateGrasland
而不是viewDidAppear:
中调用viewDidLoad
,如下所示:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated]
[self animateGrasland];
}
// Remove your implementation of the viewDidLoad method or at least the call to animateGrasland
视图加载到内存后调用 viewDidLoad
,而在将视图添加到视图层次结构后调用viewDidAppear:
。在您的情况下,这意味着在视图可见之后。由于您希望动画在视图可见时立即启动,因此您应该在viewDidAppear: