较少代码实现,类似简书个人页面的头像变化功能
大家也可以根据 ScrollView 的偏移量实现更多的功能,如导航栏渐变,或者其他视图。
还有我们常用的第三方上拉刷新、下拉加载也是基于 ScrollView 的偏移量来实现的。
ViewController.swift
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var userImage: UIImageView!
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
userImage.layer.masksToBounds = true
userImage.layer.cornerRadius = 30
tableView.delegate = self
tableView.dataSource = self
}
/// 每次视图滚动时候调用此方法,因为tableView也是继承与scrollView,所以也可以使用此方法
func scrollViewDidScroll(scrollView: UIScrollView) {
let offsetY = tableView.contentOffset.y
switch offsetY {
case -35...0, 0...25 : //按照你需求的效果进行调整 如不要 -35...0 继续上拉时候就不会变大了
userImage.frame.size.height = 60 - offsetY
userImage.frame.size.width = 60 - offsetY
userImage.center.x = self.view.center.x
userImage.layer.cornerRadius = userImage.frame.size.width/2
default:
break
}
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 30
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
return UITableViewCell()
}
}
例:让导航栏透明度随之改变
let offsetY = scrollView.contentOffset.y
switch offsetY {
case -90...0:
self.navigationController?.navigationBar.alpha = 0
case 1...500:
self.navigationController?.navigationBar.alpha = offsetY/200
default:
break
}