代码之家  ›  专栏  ›  技术社区  ›  taskinoor

iPhone:检测UIImageView图像序列动画结束的最佳方法

  •  8
  • taskinoor  · 技术社区  · 14 年前

    我们知道这一点 UIImageView animationImages 属性,配置动画持续时间,重复计数等,然后只是开火。但似乎没有办法知道这部动画片何时结束。

    假设我有十个图像,然后我想用它们运行一个动画(repeat count=1)。动画结束后,我想运行一些其他代码。知道动画已经结束的最好方法是什么?

    NSTimer 并计划在动画持续时间后开火。但如果你需要很高的精度,你真的不能依赖计时器。

    图像序列动画已结束而不使用计时器?

    myImageView.animationImages = images; // images is a NSArray of UIImages
    myImageView.animationDuration = 2.0;
    myImageView.animationRepeatCount = 1;
    
    [myImageView startAnimating]
    
    3 回复  |  直到 11 年前
        1
  •  8
  •   Ben Zotto sberry    14 年前

    这个 isAnimating UIImageView上的属性应转到 NO 当它完成动画。不过,它不是一个正式的属性,所以不能对它进行观察。您可以在细粒度计时器(如 CADisplayLink 的)。

    没有“动画完成”的代表,如果这是你要找的类型。时间可以根据图像的加载延迟等而变化,不,没有确切的方法知道何时完成。

        2
  •  1
  •   Geri Borbás    11 年前

    我做了这个(UIImageView子类的方法)。

    -(void)startAnimatingWithCallback:(UIImageViewAnimationCompletitionBlock) completitionCallback
    {
        [self startAnimating];
    
        dispatch_queue_t animatingQueue = dispatch_get_current_queue();
        dispatch_queue_t pollingQueue = dispatch_queue_create("pollingQueue", NULL);
        dispatch_async(pollingQueue, ^{
    
            while(self.isAnimating) { usleep(10000); }
            dispatch_async(animatingQueue, ^{ if (completitionCallback) completitionCallback(); });
    
        });
    }
    

    简单用法:

    [self.oneView fadeOut];
    [self.otherView startAnimatingWithCallback:^
    {
        [self.oneView fadeIn];
    }];
    
        3
  •  0
  •   Kaktusiarz    9 年前

    此外,我可以建议设置UIImageView(属性)的默认图像 image startAnimating 方法)。这样我们就避免了当动画完成但没有调用回调时可能出现的丑陋的斑点。