UIRefreshController 结束动画问题

Posted

技术标签:

【中文标题】UIRefreshController 结束动画问题【英文标题】:UIRefreshController Ending Animation Issue 【发布时间】:2014-12-03 19:59:52 【问题描述】:

当我调用 self.refreshControl.endRefreshing() 时,它会将 tableView 捕捉回原来的位置。我应该如何对其进行动画处理,以便它流畅地返回到 endRefreshing() 上的原始位置?

【问题讨论】:

我有这个问题,我发现的唯一解决方案是在 endRefreshing 之后延迟调用 reloadData。 [self.tableView performSelector:@selector(reloadData) withObject:self.tableView afterDelay:0.2]; @user1715438 非常感谢。 @user1715438,我也是,afterDelay 对我有用,这是唯一的解决方案。 下次尝试提供一些有问题的代码。 【参考方案1】:

试试这个

[CATransaction begin];
[CATransaction setCompletionBlock:^
    // reload tableView after refresh control finish refresh animation
    [self.tableView reloadData];
];

[self.refreshControl endRefreshing];
[CATransaction commit];

【讨论】:

【参考方案2】:

对于遇到此问题的任何人,您必须在重新加载表数据之前调用您的 endRefreshing 方法。否则,当表格更新时,它将覆盖刷新并导致它看起来有问题。

【讨论】:

"endRefreshing" 刷新完成后必须显式调用【参考方案3】:
// stop refreshing
[self.refreshControl endRefreshing];

// update tableview
[self.tableview performSelector:@selector(reloadData) withObject:nil afterDelay:.3]; 

【讨论】:

【参考方案4】:

我遇到了这个问题,并尝试了上面的每一个建议(以及来自类似线程的其他建议)。

在我的情况下问题出在...我没有在界面生成器中启用刷新。我只添加了创建刷新控件并侦听值更改事件的代码。它有效,但正如其他人所描述的那样“跳跃”。

在界面生成器中启用它解决了我的问题。如果您已经尝试过其他所有方法,请检查您的故事板!

【讨论】:

【参考方案5】:

我也遇到过这个问题。对于endRefreshing(),文档说明:

如果还启用了动画,则使用动画隐藏控件。

我将调用包装在 UIView 动画块中,过渡变得平滑:

UIView.animateWithDuration(0.5) 
    self.refreshControl.endRefreshing()

【讨论】:

【参考方案6】:

这对我来说适用于 Swift 2

if self.refreshControl.refreshing 
     self.refreshControl.endRefreshing()


GlobalHelper.setTimeout(0.1, block: 
     self.tableView.reloadData()
)

这是我的超时功能:

static func setTimeout(delay:NSTimeInterval, block:()->Void) -> NSTimer 
    return NSTimer.scheduledTimerWithTimeInterval(delay, target: NSBlockOperation(block: block), selector: #selector(NSOperation.main), userInfo: nil, repeats: false)

【讨论】:

【参考方案7】:

在 Swift 3 ios 10 中,我得到了与 ibrahimyilmaz 类似的方法,它是:

self.refreshControl.endRefreshing()
//Need to dispatch the alertView, otherwise, RefreshControl.endRefreshing() doesn't work.
let when = DispatchTime.now() + 1 
DispatchQueue.main.asyncAfter(deadline: when)  [weak self] in
  self?.showSettingAlertView()

起初,我按照许多线程中的建议调度 endRefreshing,但实际上它是对我有用的另一种方式。

附加信息:此代码在 location:didChange:delegate 中执行,而不是在 viewDidLoad 或 viewWillAppear 中。 通过其他线程,当您尝试结束刷新并尝试同时显示弹出窗口时,Apple SDK 中似乎存在问题。

【讨论】:

以上是关于UIRefreshController 结束动画问题的主要内容,如果未能解决你的问题,请参考以下文章

UIRefreshController Tableview 中的前 2 行不活动

popupwindow设置了消失动画,消失动画结束后有出现了。。。要怎么解决。。

Listview 项目动画在滚动时停止

我写CSS的常用套路

JS如何监听动画结束

为啥我应该使用基于块的动画而不是开始/结束动画?