UIImageView 的 startAnimating 会在动画完成后自行移除吗?

Posted

技术标签:

【中文标题】UIImageView 的 startAnimating 会在动画完成后自行移除吗?【英文标题】:UIImageView's startAnimating does remove itself when animation is finished? 【发布时间】:2011-10-06 02:57:57 【问题描述】:

使用 UIImageview 制作动画需要以下步骤

    创建自动发布的 UIImageView 创建图像数组 将图像数组分配给 UIImageView 的 animationImages 属性 设置其他属性 将 UIImageView 作为子视图添加到视图中 开始动画

我担心内存泄漏。 只要 UIImageView 是自动释放的对象,imageView 会被释放吗?

【问题讨论】:

【参考方案1】:

听起来您希望图像视图在动画完成后消失。事实上,它不会。它将仍然是一个子视图。我不确定动画完成后会是什么样子。

这本身并不是内存泄漏,因为视图仍然有一个指向图像视图的指针,但是如果您一遍又一遍地重复上述操作,您的内存将越来越少。您需要在某个时候从其父视图中删除图像视图。

您可以做的可能是使用[UIView animateWithDuration:animations:completion:] 创建动画。给它一个等于动画图像持续时间的持续时间。在动画块中什么都不做。在完成块中,从其父视图中删除图像视图。

或者只是执行 performSelectorAfterDelay 来调用删除视图的东西。不确定是否会更好地保证与图像序列的动画同步。

【讨论】:

【参考方案2】:

你可以试试这个: Memory leaks debugging

希望对你有帮助^^

【讨论】:

【参考方案3】:

您可以确定 UIImageView 只要是视图层次结构的一部分就不会被释放。

另外,如果你在第 2 步分配了 NSArray,你应该在第 3 步之后释放它。其余的看起来不错。

【讨论】:

【参考方案4】:

如果你只是想在动画完成后从superview中移除imageview,使用以下两行:

[UIImageView setAnimationDelegate:self];

[UIImageView setAnimationDidStopSelector:@selector(removeFromSuperview)];

【讨论】:

以上是关于UIImageView 的 startAnimating 会在动画完成后自行移除吗?的主要内容,如果未能解决你的问题,请参考以下文章

使 UIImageview 根据另一个 UIImageview 旋转而旋转

UIImageView:将多个 UIViewContentMode 属性应用于一个 UIImageView?

如何同时为 UIImageView 的图像和 UIImageView 本身设置动画?

UIImageView:将大小更改为图像大小?

滑动手指 UIImageView

[BS-24] UIImageView的contentMode属性