在 UIView 的 animateWithDuration 块方法中阻止 self 和 dot 访问器的作用域
Posted
技术标签:
【中文标题】在 UIView 的 animateWithDuration 块方法中阻止 self 和 dot 访问器的作用域【英文标题】:Block scoping of self and dot accessors inside animateWithDuration block method of UIView 【发布时间】:2012-12-07 16:33:36 【问题描述】:通过 animateWithDuration 块内的点访问器访问 self 和 self 的属性是否安全?
我遇到了一些与扩展自帧相关的动画故障,尤其是当我调用 self.frame 时,如下所示:
[UIView animateWithDuration:timeInterval animations:^
self.citiesTableView.frame = CGRectMake(0, 100, 320, 120);
self.frame = CGRectMake(0, 0, 320, 220);
completion:^(BOOL completed)
if (completed)
self.citiesTableView.frame = CGRectMake(0, 100, 320, 120);
self.frame = CGRectMake(0, 0, 320, 220);
[self.citiesTableView reloadData];
];
【问题讨论】:
【参考方案1】:由于视图不保留块,因此在块内强捕获self
是安全的。当块强烈捕获self
(通过访问实例变量有意或错误地)并被视图保留时,就会出现问题,例如,当使用块作为条形按钮项的响应时。在这里,块被执行并被丢弃。
【讨论】:
以上是关于在 UIView 的 animateWithDuration 块方法中阻止 self 和 dot 访问器的作用域的主要内容,如果未能解决你的问题,请参考以下文章
如何暂停和恢复 UIView.animateWithDuration
AnimateWithDuration 禁用 UIView 上的 userInteraction
如何在 animateWithDuration 块期间利用 UIView 的变化值?
在 animateWithDuration:completion 的完成块中删除 UIView