6

我使用了由“mayoff”(Rob Mayoff)“UIImageView+animatedGIF”制作的类,这是在stackoverflow上的答案之一中提出的。UIImageView+动画GIF

有了它,我可以在 iOS 上的 UIImageView 中导入动画 .gif 图像。这个类完美无缺,但唯一的问题是 .gif 总是循环播放。无论我如何导出它(我从 photoshop 导出图像 - 67 帧,将重复设置为“一次”),它都会在 UIImageView 中永远循环。

我正在用这两行导入我的 .gif:

NSURL *url = [[NSBundle mainBundle] URLForResource:@"Loading" withExtension:@"gif"];
self.loadingImageView.image = [UIImage animatedImageWithAnimatedGIFData:[NSData dataWithContentsOfURL:url]];

非常简单,它的工作原理。我尝试按照 Rob 的建议将 animationRepeatCount 属性设置为 1,但这并没有成功。此外,我也尝试将 UIImageView 的动画图像属性设置为 gifImage.images,而不仅仅是将视图的图像属性设置为 gifImage。在这种情况下,.gif 根本没有动画。

任何想法如何只播放一次.gif?我可以想到很多技巧(比如将 gif 的最后一帧设置为在一段时间后显示,但如果可能的话,我会先尝试一些更简单的方法)。

4

3 回答 3

19

我从该项目中获取了测试应用程序并将viewDidLoad方法更改为:

- (void)viewDidLoad {
    [super viewDidLoad];

    NSURL *url = [[NSBundle mainBundle] URLForResource:@"test" withExtension:@"gif"];
    UIImage *testImage = [UIImage animatedImageWithAnimatedGIFData:[NSData dataWithContentsOfURL:url]];
    self.dataImageView.animationImages = testImage.images;
    self.dataImageView.animationDuration = testImage.duration;
    self.dataImageView.animationRepeatCount = 1;
    self.dataImageView.image = testImage.images.lastObject;
    [self.dataImageView startAnimating];
}

当应用程序启动时,它会为图像设置一次动画,然后只显示最后一帧。如果我连接一个发送的按钮[self.dataImageView startAnimating],然后点击该按钮再次运行动画,然后在最后一帧再次停止。

确保按照我上面的方式设置图像视图。确保您没有将图像视图的image属性设置为动画图像。image如果要停止动画,则必须将图像视图的属性设置为非动画图像。

于 2013-07-28T04:52:09.480 回答
1

我已经分叉了由“Dreddik”制作的“uiimage-from-animated-gif”并添加了一个委托方法

#pragma mark - AnimatedGifDelegate
- (void)animationWillRepeat:(AnimatedGif *)animatedGif
{
    NSLog(@"animationWillRepeat");
    //[animatedGif stop];
}

所以你知道动画会重复的时间,并在每次重复的中间做你自己的事情。您可以计算动画重复的次数,并在达到一定次数时停止动画。

分叉的存储库位于https://github.com/rishi420/Animated-GIF-iPhone

于 2014-05-01T09:19:26.680 回答
0

开始/stp 动画和管理动画计数有问题所以使用了这个pod

imageViewObject.animate(withGIFNamed: "gif_name", loopCount: 1) {
            print("animating image")
    }

开始/停止动画:

imageViewObject.isAnimatingGIF ? imageViewObject.stopAnimatingGIF() : imageViewObject.startAnimatingGIF()    
于 2020-08-18T21:58:42.220 回答