2016-12-18 6 views
0

Вот код с Swift3.0Swift - использовать Tableview, чтобы сделать список обновлений

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 напрямую. Похоже, что список быстро встряхнется.

+0

Вы знаете, что эта функциональность уже обрабатывается при использовании [UIRefreshControl] (https://developer.apple.com/reference/uikit/uirefreshcontrol)? вы можете проверить [этот вопрос] (http://stackoverflow.com/questions/24475792/how-to-use-pull-to-refresh-in-swift-2), чтобы узнать, как его использовать. –

+0

с использованием UIRefreshControl представляется многообещающим решением, но если я хочу добавить какую-то пользовательскую анимацию, UIRefreshControl не может много помочь. Я должен написать настраиваемый элемент управления таким образом: – pluto

+0

Итак, теперь идея заключается в следующем: вы должны попытаться выяснить, как создать пользовательский UIRefreshControl (пользовательская анимация). –

ответ

1

Попробуйте использовать UIRefreshControl

Может быть, это руководство поможет вам https://www.appcoda.com/pull-to-refresh-uitableview-empty/

+0

Хорошо, это мне очень помогает. Я не использовал этот контроль раньше, что кажется перспективным решением. Несмотря на то, что UIRefreshControl может сделать список системных обновлений, я не могу использовать его для создания настраиваемого списка обновлений, такого как список обновлений с динамическим эффектом, когда он обновляется Итак, я также хочу решить свой старый вопрос. Спасибо, в любом случае! – pluto