【问题标题】:How to continue animate refresh control on view changed如何在视图更改时继续动画刷新控件
【发布时间】:2016-11-02 17:21:08
【问题描述】:

我在选项卡栏控制器内的视图“A”中有一个表。当我向下滚动以重新加载表格刷新控件时开始动画。当按标签栏控制器进入视图“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
    }
}

【问题讨论】:

  • 你会展示你为实现它所做的一些事情吗?
  • 用代码@Vin编辑
  • 在 viewDidAppear 中,在你的 if 语句中,尝试 refreshControl.beginRefreshing()

标签: ios swift tableview refresh controls


【解决方案1】:

假设您的控制器 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 作为子视图添加到 A 表控制器。当您转到另一个控制器时,您可能会呈现另一个控制器 (B),而当您返回 A 时,您的刷新会被冻结或卡住。

您可以在viewWillAppear 上开始UIRefreshControl 动画并在viewDidDisappear 上结束它。在转换期间保存刷新过程的状态以知道何时显示UIRefreshControl

你可以像这样使用布尔值:

// 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)
    }
}

【讨论】:

    猜你喜欢
    • 2014-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-23
    • 1970-01-01
    • 2014-04-11
    • 1970-01-01
    相关资源
    最近更新 更多