个人中心头部背景下拉放大,上拉显示本来的navgationBar背景

前言:最近做了很多项目发现现在个人中心上部都喜欢放一张大的图片作为背景,或者将头像的 放大模糊版作为背景(和前者原理差不多只是加了个磨砂玻璃或者是是直接对图像处理模糊化)。

个人中心头部背景下拉放大,上拉显示本来的navgationBar背景_第1张图片

对于这样的个人中心,就有两个效果使我们要考虑的:

第一像下拉的时候会漏出上边的背景色。(见过有人放一个比较大的图片y坐标定为负数,但是个人感觉不好)

个人中心头部背景下拉放大,上拉显示本来的navgationBar背景_第2张图片

第二是向上拉时,title文字直接出现在页面上,很有违和感。

个人中心头部背景下拉放大,上拉显示本来的navgationBar背景_第3张图片

处理他的方法也很简单。只要用到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;

}

}

你可能感兴趣的:(个人中心头部背景下拉放大,上拉显示本来的navgationBar背景)