Swift - 使用tableView创建更新列表

时间:2016-12-18 04:01:34

标签: swift tableview

以下是Swift3.0的代码

private let MAX_HEIGHT: CGFloat = 100.0

override func viewDidLoad() {
    super.viewDidLoad()

    self.spinner = UIActivityIndicatorView(frame: CGRect(x: 0, y: -MAX_HEIGHT, width: self.view.bounds.width, height: MAX_HEIGHT))
    self.spinner.activityIndicatorViewStyle = .whiteLarge
    self.spinner.color = .blue
    self.view.insertSubview(spinner, at: 0)
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete implementation, return the number of rows
    return 20
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "basicCell", for: indexPath)
    cell.textLabel?.text = "The \(indexPath.row) Row"

    return cell
}

以下是重要的代码: 当我拖动列表时,它将执行此操作

override func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
    if -scrollView.contentOffset.y >= MAX_HEIGHT + scrollView.contentInset.top {
        UIView.animate(withDuration: 0.5, animations: {
            scrollView.contentInset.top += MAX_HEIGHT
        })
        self.update()
    }
}

func update() {
    self.spinner.startAnimating()
    // I want to make a sleep for 2 seconds, But sleep() is not suit 
    UIView.animate(withDuration: 2.0, animations: {
        self.view.alpha = 0.99 
    }, completion: { (_) -> Void in
        self.view.alpha = 1.0
        self.spinner.stopAnimating()
        UIView.animate(withDuration: 0.5, animations: {
            self.tableView.contentInset.top -= MAX_HEIGHT
        })
    })
}

The Main View

我想要的动画就是当我完成拖动时,列表会有像这样的更新动画

Updating

完成拖动后,scrollview.contentInset.top将设置为100.0。如果我拖得更长一点(125.0 ..),列表会有一个动画,就像我从拖动到100.0的位置慢慢滑动

但结果是,当我完成拖动时,列表会滑动一点,然后滑动到100.0,它没有直接滑动到100.0。 这个列表看起来很快就会动摇。

1 个答案:

答案 0 :(得分:1)

尝试使用UIRefreshControl

也许这个教程会帮助你 https://www.appcoda.com/pull-to-refresh-uitableview-empty/