ios - 如何在 View 上继续动画刷新控件已更改

标签 ios swift tableview refresh controls

我在选项卡栏 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/

相关文章:

ios - 发布本地通知时应用程序崩溃

ios - Xcode 错误 NSException

objective-c - 如何使用 Storyboard设置 UIView init 的大小?

iphone - 如何在tableview编辑时显示该行?

c# - 如何在 MonoTouch 上将指定图像添加到用户的相机胶卷相册

Swift - 如何从对象数组创建字符串数组

swift - 在 AppKit View 中嵌入 SwiftUI View

swift - 本地化 iOS 14 动态 WidgetKit 配置

javafx - 使用 FX-CSS 在 JavaFX Tableview 中隐藏行?

ios - 以编程方式将两个文本字段添加到 tableViewCell