最近,navigationBar的渐变效果实现火的要命,几乎每个app,不管合适不合适的都会加上一两个这种页面,之前开发的项目里,也做了这种效果,现在闲暇之余,给大家分享一下心得。话不多说,直接贴代码。
第一步:
在viewWillAppear方法中先设置navigationController的代理为self(控制器本身)。
-(void)viewWillAppear:(BOOL)animated
{
[superviewWillAppear:animated];
self.navigationController.delegate =self;
}
第二步:
在navigationController这个代理方法中判断一下,如果是此控制器就设置透明,不是此控制器就设置成不同样式,这样做的目的是,当你进入navigationBar透明的这个控制器后,不管push还是pop到别的控制器时,navigationBar不会变成透明。
-(void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
if (viewController == self) {
// 背景设置为黑色
self.navigationController.navigationBar.tintColor = [UIColor blackColor];
// 透明度设置为0.3
self.navigationController.navigationBar.alpha = 0;
// 设置为半透明
self.navigationController.navigationBar.translucent = YES;
} else {
// 进入其他视图控制器
self.navigationController.navigationBar.alpha = 1;
// 背景颜色设置为系统默认颜色
self.navigationController.navigationBar.tintColor = nil;
self.navigationController.navigationBar.translucent = NO;
}
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
CGFloat offsetY = scrollView.contentOffset.y;
if (offsetY >50) {
CGFloat alpha =MIN(1,1 - ((50 +64 - offsetY) / 64));
self.navigationController.navigationBar.alpha = alpha;
}else
{
self.navigationController.navigationBar.alpha = 0;
}
}
第四步:
-(void)dealloc
{
self.navigationController.delegate =nil;
}