主要步驟:
1、在顯示tableView的controller中定義頂部圖片的headerImageView和圖片原始高度imageOriginalHeight
2涣澡、在創(chuàng)建UI時(shí)創(chuàng)建頭部圖片污尉,并添加到tableView上坟乾。這里需要注意的是:將headerImageView的frame的縱坐標(biāo)(y)設(shè)為負(fù)的imageOriginalHeight
3啃沪、將tableView的內(nèi)容向下偏移imageOriginalHeight
4昧廷、最后scrollViewDidScroll方法中,根據(jù)scrollView的偏移量來改變ImageView的frame
(1)獲取scrollView的縱向偏移量
(2)如果scrollView的縱向偏移量小于負(fù)的iamgeOriginalHeight偎箫,就改變imageView的frame
感覺上面說了半天木柬,沒太說明白,算了直接上代碼
主要代碼如下:
1镜廉、在顯示tableView的controller中定義頂部圖片的headerImageView和圖片原始高度imageOriginalHeight
//圖片的原始高度
let imageOriginalHeight: CGFloat = 200
//頂部圖片
var headerImageView = UIImageView()
2弄诲、在創(chuàng)建UI時(shí)創(chuàng)建頭部圖片,并添加到tableView上娇唯,將tableView的內(nèi)容向下偏移imageOriginalHeight
//創(chuàng)建頭部圖片
self.headerImageView = FactoryUI.createImageView(CGRectMake(0, -imageOriginalHeight, screenW, imageOriginalHeight), imageName: "welcome1")
self.tableView.addSubview(self.headerImageView)
//將tableView的內(nèi)容向下偏移imageOriginalHeight
//UIEdgeInsetsMake表示的是相對(duì)值
self.tableView.contentInset = UIEdgeInsetsMake(imageOriginalHeight, 0, 0, 0)
3、最后scrollViewDidScroll方法中寂玲,根據(jù)scrollView的偏移量來改變ImageView的frame
//頭部圖片的效果
//實(shí)現(xiàn)原理:根據(jù)scrollView的偏移量來改變imageView的frame
func scrollViewDidScroll(scrollView: UIScrollView) {
if scrollView == self.tableView {
//獲取scrollView的縱向偏移量
let yoffset = scrollView.contentOffset.y
//獲取scrollView的橫向偏移量塔插,橫向偏移量的變化而變化
let xoffset = (imageOriginalHeight + yoffset) / 2
if yoffset < -imageOriginalHeight {
//記錄原來imageView的frame
var rect = self.headerImageView.frame
//縱坐標(biāo)
rect.origin.y = yoffset
//高度
rect.size.height = -yoffset
//橫坐標(biāo)
rect.origin.x = xoffset
//寬度,fabs()求絕對(duì)值
rect.size.width = screenW + fabs(xoffset) * 2
self.headerImageView.frame = rect
}
}
}