我想像这个链接制作一个动画:
以下是我的简单截图:
在我的情况下,我想要在向上滑动时,蓝色标题视图将消失,导航栏将变为蓝色。
这是我的代码:
import UIKit
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet var tableView: UITableView!
@IBOutlet var headerView: UIView!
var dataSource: [String] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14].map {"\($0)"}
override func viewDidLoad() {
super.viewDidLoad()
tableView.dataSource = self
tableView.delegate = self
headerView.backgroundColor = UIColor.blueColor()
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return dataSource.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)
cell.textLabel!.text = dataSource[indexPath.row]
return cell
}
}
我可以使用这样的动画更改视图,包括:导航栏,TableView的标题视图,状态栏。
但是如何检查TableView向下滚动的时间,那么Header View将会改变。
答案 0 :(得分:3)
您必须在tableView中使用UIScrollViewDelegate
来拦截scrollView操作:
class YourClass: YourType, UIScrollViewDelegate {}
检查official apple documentation
您可以处理查看scrollViewDidScroll(_:)方法的scrollview。
这只是在用户滚动到最后添加更多网络数据的示例,您可以使用它来触发标题动画。
let threshold = 100.0 // threshold from bottom of tableView
var isLoadingMore = false // flag
func scrollViewDidScroll(scrollView: UIScrollView) {
let contentOffset = scrollView.contentOffset.y
let maximumOffset = scrollView.contentSize.height - scrollView.frame.size.height;
if !isLoadingMore && (maximumOffset - contentOffset <= threshold) {
// Get more data - API call
self.isLoadingMore = true
// Update UI
dispatch_async(dispatch_get_main_queue()) {
tableView.reloadData()
self.isLoadingMore = false
}
}
}
<强>更新强>
通过分析你的动画,这不是简单但不是不可能的:) 我可以看到两种不同的状态:
第二个州:
您可以通过选择UIViewController
类型来整理控制器。
这个UIViewController必须由:
P.S。 tableViewHeader可以是日期:2016年1月21日星期四的灰色标签,因为您可以看到在动画期间尺寸不会改变。