我在选项卡栏 Controller 内的 View “A”中有一个表。当我向下滚动以重新加载表格刷新控件时开始动画。当按标签栏 Controller 进入 View “B”然后返回查看“A”时,刷新控件可见但没有动画。
有人可以帮助我吗?谢谢
func refresh(sender:AnyObject)
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), { () -> Void in
Call API for data
dispatch_async(dispatch_get_main_queue(), { () -> Void in
UPDATE UI
refreshControl.endRefreshing()
})
});
}
override func viewDidAppear(animated: Bool)
{
if(requestTerminated == false)
{
//Continue animate refresh control somehow
}
}
最佳答案
假设您在 Controller A 中遇到这种情况,例如在 viewDidLoad
中:
//global var
var refreshControl:UIRefreshControl!
self.refreshControl = UIRefreshControl()
self.refreshControl.attributedTitle = NSAttributedString(string: "pull to refresh")
self.refreshControl.addTarget(self, action: #selector(MyTableViewController.pullToRefresh(_:)), forControlEvents: UIControlEvents.ValueChanged)
self.tableView.addSubview(refreshControl)
如您所见,您已将 refreshControl
作为 subview 添加到 A 表 Controller 。当您转到另一个 Controller 时,您可能会显示另一个 Controller (B),当您返回 A 时,您的刷新被卡住或卡住。
您可以在 viewWillAppear
上启动 UIRefreshControl
动画并在 viewDidDisappear
上结束它。在转换期间保存刷新过程的状态以了解何时显示 UIRefreshControl
。
您可以像这样使用 bool 值:
// Refresh state
var isRefreshing = false
// Call on viewWillApper
func superviewWillApper(){
if isRefreshing && !refreshControl.refreshing{
startRefreshAnimation()
}
}
// Call on viewDidDisapper
func superviewDidDisappear(){
endRefreshAnimation(false, dataFetched: !isRefreshing)
}
func startRefreshAnimation(){
refreshControl.beginRefreshing()
contentOffset = CGPointMake(0, -refreshControl.bounds.size.height)
isRefreshing = true
}
//Saves state of refresh
func endRefreshAnimation(wasEmpty: Bool, dataFetched: Bool){
refreshControl.endRefreshing()
isRefreshing = !dataFetched
if !wasEmpty{
setContentOffset(CGPointZero, animated: true)
}else{
setContentOffset(CGPointZero, animated: false)
}
}
关于ios - 如何在 View 上继续动画刷新控件已更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38126051/