前言:最近做了很多项目发现现在个人中心上部都喜欢放一张大的图片作为背景,或者将头像的 放大模糊版作为背景(和前者原理差不多只是加了个磨砂玻璃或者是是直接对图像处理模糊化)。
对于这样的个人中心,就有两个效果使我们要考虑的:
第一像下拉的时候会漏出上边的背景色。(见过有人放一个比较大的图片y坐标定为负数,但是个人感觉不好)
第二是向上拉时,title文字直接出现在页面上,很有违和感。
处理他的方法也很简单。只要用到UIScrollView的delegate就可以了
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
if(scrollView.contentOffset.y > _contentOffSet.y){
_navBG.alpha +=0.1;
if(_navBG.alpha >=1){
_navBG.alpha = 1;
}
}else{
_navBG.alpha -= 0.1;
if(_navBG.alpha <=0){
_navBG.alpha = 0;
}
}
CGFloat width = self.view.frame.size.width; // 图片宽度
CGFloat yOffset = scrollView.contentOffset.y;// 偏移的y值
if (yOffset < 0) {
CGFloat totalHeight = DEF_HeaderView_height + ABS(yOffset);
CGFloat f = totalHeight / DEF_HeaderView_height;
bgImage.frame =CGRectMake(- (width * f - width) / 2, yOffset, width * f, totalHeight); //拉伸后的图片的frame应该是同比例缩放。
}
}
ps:我实现上面透明的方法。
1.self.navigationController.navigationBar.subviews[0].alpha=0;
_navBG=self.navigationController.navigationBar.subviews[0];
2.for(UIView*viewinself.navigationController.navigationBar.subviews) {
if([viewisKindOfClass:NSClassFromString(@"_UINavigationBarBackground")]) {
view.backgroundColor= [UIColor whiteColor];
view.alpha=0;
_navBG= view;
}
}