iOS 導航欄背景顏色完全透明及漸變

weixin_34279579發表於2016-11-01

閒來無事,看到QQ導航透明,上拉透明度遞增直至1。


2020668-26e0a6c6559989a7.gif

1.導航欄透明

首先試了[self.navigationController.navigationBar setAlpha:0];這樣導航及item都消失了,pass。

百度一下,就兩句程式碼

//設定背景圖為空

[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:0];

//導航條黑線問題

[self.navigationController.navigationBar setShadowImage:[UIImage new]];

2.導航欄上拉透明度遞增

思路:建立一個全域性view遮蓋住navigationBar,也就是我們要操作這個view的透明度達到類似效果。介面關閉恢復導航初始設定

坑:這個全域性view的userInteractionEnabled使用者互動效果要關閉,否則在透明度為1的時候會遮蓋item而影響操作

alphaView = [[UIView alloc]initWithFrame:CGRectMake(0, -20, self.view.bounds.size.width, 64)];

alphaView.alpha = 0;

alphaView.userInteractionEnabled = NO;

alphaView.backgroundColor = [UIColor yellowColor];

[self.navigationController.navigationBar insertSubview:alphaView atIndex:0];

然後再scrollViewDidScroll裡面判斷是上拉還是下拉,當上拉偏移64的時候設定透明度為1,程式碼如下

-(void)scrollViewDidScroll:(UIScrollView *)scrollView{

CGFloat offset = scrollView.contentOffset.y;

[UIView animateWithDuration:0.1 animations:^{

if (offset>0) {

alphaView.alpha = 1;

}else if(offset>-64&&offset<0){

alphaView.alpha = (64+offset)/64.0;

}else{

alphaView.alpha = 0;

}

}];

NSLog(@"======>%f_alpha=%f",offset,alphaView.alpha);

}

為了不影響其他導航,頁面消失時恢復導航初始設定

-(void)viewWillDisappear:(BOOL)animated{

[self.navigationController.navigationBar setBackgroundImage:nil forBarMetrics:0];

[self.navigationController.navigationBar setShadowImage:nil];

[alphaView removeFromSuperview];

}


如果你的才華撐不起你的野心,就靜下心來學習學習。


相關文章