【问题标题】:Animation not running in the order that code is written动画未按照编写代码的顺序运行
【发布时间】:2014-08-02 09:47:41
【问题描述】:

我正在尝试设置一个按钮,在作为我的根视图控制器的一部分的图像视图中播放动画,然后继续更改子视图控制器。

但由于某种原因,代码更改了视图控制器,然后播放动画。

我认为动画片段将在视图控制器更改发生之前实现,因为它是代码中的第一个。

代码做的一切都很好,它只是向后做。有人知道出了什么问题吗?

- (IBAction)next:(UIButton *)sender {

    clouds.animationImages = [NSArray arrayWithObjects:
                              [UIImage imageNamed:@"cloudAnim.0001.png"],
                              [UIImage imageNamed:@"cloudAnim.0002.png"],
                              [UIImage imageNamed:@"cloudAnim.0003.png"],
                              [UIImage imageNamed:@"cloudAnim.0004.png"],
                              [UIImage imageNamed:@"cloudAnim.0005.png"],
                              [UIImage imageNamed:@"cloudAnim.0006.png"],
                              [UIImage imageNamed:@"cloudAnim.0007.png"],
                              [UIImage imageNamed:@"cloudAnim.0008.png"],
                              [UIImage imageNamed:@"cloudAnim.0009.png"],
                              [UIImage imageNamed:@"cloudAnim.0010.png"],
                              [UIImage imageNamed:@"cloudAnim.0011.png"],
                              [UIImage imageNamed:@"cloudAnim.0012.png"],
                              [UIImage imageNamed:@"cloudAnim.0013.png"],
                              [UIImage imageNamed:@"cloudAnim.0014.png"],
                              [UIImage imageNamed:@"cloudAnim.0015.png"],
                              [UIImage imageNamed:@"cloudAnim.0016.png"],
                              [UIImage imageNamed:@"cloudAnim.0017.png"],
                              [UIImage imageNamed:@"cloudAnim.0018.png"],
                              [UIImage imageNamed:@"cloudAnim.0019.png"],
                              [UIImage imageNamed:@"cloudAnim.0020.png"],
                              [UIImage imageNamed:@"cloudAnim.0021.png"],
                              [UIImage imageNamed:@"cloudAnim.0022.png"],
                              [UIImage imageNamed:@"cloudAnim.0023.png"],
                              [UIImage imageNamed:@"cloudAnim.0024.png"],
                              [UIImage imageNamed:@"cloudAnim.0025.png"],
                              [UIImage imageNamed:@"cloudAnim.0026.png"],
                              [UIImage imageNamed:@"cloudAnim.0027.png"],
                              [UIImage imageNamed:@"cloudAnim.0028.png"],
                              [UIImage imageNamed:@"cloudAnim.0029.png"],
                              [UIImage imageNamed:@"cloudAnim.0030.png"],
                              [UIImage imageNamed:@"cloudAnim.0031.png"],
                              [UIImage imageNamed:@"cloudAnim.0032.png"],
                              [UIImage imageNamed:@"cloudAnim.0033.png"],
                              [UIImage imageNamed:@"cloudAnim.0034.png"],
                              [UIImage imageNamed:@"cloudAnim.0035.png"],
                              [UIImage imageNamed:@"cloudAnim.0036.png"],
                              [UIImage imageNamed:@"cloudAnim.0037.png"],
                              [UIImage imageNamed:@"cloudAnim.0038.png"],
                              [UIImage imageNamed:@"cloudAnim.0039.png"],
                              [UIImage imageNamed:@"cloudAnim.0040.png"],
                              [UIImage imageNamed:@"cloudAnim.0041.png"],
                              [UIImage imageNamed:@"cloudAnim.0042.png"],
                              [UIImage imageNamed:@"cloudAnim.0043.png"],
                              [UIImage imageNamed:@"cloudAnim.0044.png"],
                              [UIImage imageNamed:@"cloudAnim.0045.png"],
                              [UIImage imageNamed:@"cloudAnim.0046.png"],
                              [UIImage imageNamed:@"cloudAnim.0047.png"],
                              [UIImage imageNamed:@"cloudAnim.0048.png"], nil];
    [clouds setAnimationRepeatCount:1];
    clouds.animationDuration = 2.0;
    [clouds startAnimating];

    if (currentPage == 1){
        self.page02ViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"page02"];
        [self.view insertSubview:_page02ViewController.view atIndex:0];
        [self.page01ViewController.view removeFromSuperview];
    }

    if (currentPage == 2){
        self.page03ViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"page03"];
        [self.page02ViewController.view removeFromSuperview];
        [self.view insertSubview:_page03ViewController.view atIndex:0];
    }

    currentPage = currentPage +1;
    if (currentPage >3){
        currentPage = 3;
    }
}

【问题讨论】:

    标签: ios uiviewcontroller uiimageview uibutton


    【解决方案1】:

    动画是异步的,这意味着下面的代码将立即执行。

    如果您想等到动画的一个循环完成,您需要在之后延迟代码。最简单的方法是使用dispatch_after

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        // Your view controller switching code will be executed after 2 seconds...
    });
    

    请注意,由于该方法会立即返回,因此没有什么可以阻止用户再次点击按钮并排队等待另一个转换。您可能希望在过渡期间禁用用户交互,但如果用户必须经常切换,那么 2 秒的过渡对用户来说就像是永恒的。

    【讨论】:

    • 啊,有道理。感谢您的意见,jrturton,我会开始测试这个!
    • 回答我的问题如何奖励你?
    • 乐谱下面应该有一个勾号,它是灰色的——点击它会变成绿色。如果您愿意,您还可以使用分数上方的向上箭头对答案进行投票。很高兴我能帮上忙!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 2017-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多