較少代碼實(shí)現(xiàn),類似簡(jiǎn)書個(gè)人頁(yè)面的頭像變化功能
大家也可以根據(jù) ScrollView 的偏移量實(shí)現(xiàn)更多的功能嫉晶,如導(dǎo)航欄漸變叶洞,或者其他視圖。
還有我們常用的第三方上拉刷新寸爆、下拉加載也是基于 ScrollView 的偏移量來(lái)實(shí)現(xiàn)的礁鲁。
小女神鎮(zhèn)樓.gif
SB界面設(shè)置
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
}
/// 每次視圖滾動(dòng)時(shí)候調(diào)用此方法,因?yàn)閠ableView也是繼承與scrollView赁豆,所以也可以使用此方法
func scrollViewDidScroll(scrollView: UIScrollView) {
let offsetY = tableView.contentOffset.y
switch offsetY {
case -35...0, 0...25 : //按照你需求的效果進(jìn)行調(diào)整 如不要 -35...0 繼續(xù)上拉時(shí)候就不會(huì)變大了
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()
}
}
例:讓導(dǎo)航欄透明度隨之改變
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
}