在开发中经常会给控制器的导航控制器隐藏起来,达到全窗口展示效果但是视图在上滑过程中又要导航栏显示出来,而且显示出来的是透明度渐变效果,这个其实实现起来并不复杂,首先在导航控制器位置添加一个颜色为透明色的背景视图,在背景视图上添加某种颜色的子视图,子视图的alpha为0,既然主视图可以滑动,主视图肯定继承与UIScrollView,所以在-(void)scrollViewDidScroll:(UIScrollView *)scrollView的代理方法中,根据滑动偏移量控制alpha的大小,也可控制颜色rgb的值来达到颜色也渐变。
-(void)createGoBackView{
UIView *navView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 64)];
navView.backgroundColor = [UIColor clearColor];
[self.view addSubview:navView];
UIView *changeView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 64)];
changeView.backgroundColor = [UIColor purpleColor];
changeView.alpha = 0;
self.changeView = changeView;
[self.view addSubview:changeView];
UILabel *lable = [[UILabel alloc] initWithFrame:CGRectMake(50, 25, self.view.frame.size.width-100,20)];
lable.textColor = [UIColor whiteColor];
lable.font = [UIFont systemFontOfSize:19];
lable.textAlignment = NSTextAlignmentCenter;
lable.text = @"详情";
[changeView addSubview:lable];
UIView *btnView=[[UIView alloc] initWithFrame:CGRectMake(10, 25, 100, 25)];
[self.view addSubview:btnView];
UIButton *backBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 80, 35)];
backBtn.backgroundColor = [UIColor clearColor];
[backBtn setImage:[UIImage imageNamed:@"go_back"] forState:UIControlStateNormal];
backBtn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
[backBtn setTitle:@"返回" forState:UIControlStateNormal];
[backBtn addTarget:self action:@selector(backAction) forControlEvents:UIControlEventTouchUpInside];
[btnView addSubview:backBtn];
}
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
if (scrollView.contentOffset.y > 117) {
self.changeView.alpha = (scrollView.contentOffset.y-117)/150.0;
}if (scrollView.contentOffset.y < 100) {
self.changeView.alpha = 0;
}
}
-(void)backAction{
[self.navigationController popViewControllerAnimated:YES];
}`