2014-01-27 147 views
0

我有以下例程来简单地在屏幕上为图像设置动画效果。简单移动uiimageview代码不动画

-(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) { 

         } 
     ]; 
} 

我想在加载视图后立即开始动画。并持续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(和其他后台例程导致这一点)的持续时间。

因此,因为在故事板中设置的初始位置(0,0)在viewDidLoad期间更新,所以不会触发动画。动画立即移动到完成状态。

+1

开始它,您希望动画持续5秒或您想要在5秒后执行动画吗? – Divya

+0

尝试移动代码'CGRect newFrame = CGRectMake(0,0,1024,768); self.grasland.frame = newFrame;'到其他地方,比如'viewDidLoad'方法。 – GoGreen

+0

我刚刚在正常的UIView上试过你的代码,它按预期工作 - 动画持续5秒。你在代码中运行这个动画吗? self.grasland是一个UIView对象吗? – tanzolone

回答

0

尝试调用viewDidAppear:代替viewDidLoadanimateGrasland,像这样:视图被加载到内存后

- (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:

+0

这个更好,就像使用一个定时器一样。谢谢! – Vincent