iPhone : Best way to detect the end of UIImageView image sequence animation

前端 未结 3 1751
情深已故
情深已故 2021-01-18 00:41

We know that UIImageView has a very nice support for image sequence animation. We can easily create an array of UIImage objects, set the animationImages

相关标签:
3条回答
  • 2021-01-18 01:22

    The isAnimating property on UIImageView should go to NO when it's done animating. It's not a formal property, though, so you can't set up observation on it. You can poll it on a fine-grained timer (like CADisplayLink's).

    There's no "animation completed" delegate for this, if that's the sort of thing you're looking for. The timing can be variable based on loading delay of the images, etc, and no, there's no sure-fire way to know precisely when it's done.

    The image animation stuff on UIImageView is a convenience, and not heavyweight enough to do serious animation work with. Consider rolling your own if you need that kind of precision.

    0 讨论(0)
  • 2021-01-18 01:26

    I made this (method of my UIImageView subclass).

    -(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(); });
    
        });
    }
    

    Simple usage:

    [self.oneView fadeOut];
    [self.otherView startAnimatingWithCallback:^
    {
        [self.oneView fadeIn];
    }];
    
    0 讨论(0)
  • 2021-01-18 01:36

    Furthermore I could recommend setting default image of the UIImageView (property image) on the first frame of the animation and changing it to the last frame just after launching the animation (startAnimating method). This way we avoid the ugly blick which can occur when the animation is finished but the callback is not invoked.

    0 讨论(0)
提交回复
热议问题