iOS navigationBar的半透明颜色渐变效果实现
2016-11-29 本文已影响145人
Heikki_
第一步:
在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;
}
}
第三步:
当拖动你的tableView或者collectionView时,会调用UIScrollowView的这个代理方法,在它里面做navigationBar颜色渐变的操作。
- (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;
}
}
第四步:
此时渐变效果就完成了,但是别忘了,一个程序有且只有一个navigationController,我们在第一步的时候,在viewWillAppear方法里将self.navigationController.delegate =self;当此控制器消失时,会造成delegate的混乱,所以当每次带透明navigationBar效果的控制器消失时,调用dealloc方法。
-(void)dealloc
{
self.navigationController.delegate =nil;
}