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?