【问题标题】:Simple move uiimageview code not animating简单移动uiimageview代码没有动画
【发布时间】:2014-01-27 11:11:40
【问题描述】:

我有以下例程来简单地为屏幕上的图像设置动画。

-(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 解析的持续时间(和其他后台例程会导致这种情况)。

所以因为在storyboard中设置的初始位置(0,0)是在viewDidLoad期间更新的,所以动画没有被触发。并且动画立即移动到其完成状态。

【问题讨论】:

  • 您希望动画持续 5 秒还是要在 5 秒后执行?
  • 尝试将代码 CGRect newFrame = CGRectMake(0,0,1024,768); self.grasland.frame = newFrame; 移动到其他位置,例如 viewDidLoad 方法。
  • 我刚刚在普通 UIView 上尝试了您的代码,它按预期工作 - 动画持续 5 秒。您在代码中的哪个位置运行此动画? self.grasland 是 UIView 对象吗?
  • @Divya,动画持续时间 5 秒。没有延迟(见问题中的 0.0)
  • 您确定要在视图“加载”或视图“出现”时为其设置动画吗?试着把它放在viewDidAppear:

标签: ios animation uiimageview uiimage


【解决方案1】:

尝试在viewDidAppear: 中调用animateGrasland 而不是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: 中启动它

【讨论】:

  • 那个更好,就像使用计时器一样。谢谢!
猜你喜欢
  • 1970-01-01
  • 2012-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 2017-05-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多