iOS導航欄背景透明漸變
阿新 • • 發佈:2018-07-12
highlight www con metrics alpha www. oid gin 控制
重點分析:
1.隱藏導航的最下面的線。
2.設置導航背景的不透明度(ios7.0以上不用設置,translucent默認的就是Yes不用修改,但如果別人修改了或出現那種情況,需要設置為Yes)。
3.頁面消失時導航恢復原樣。
4.滾動時調用方法設置alpha來控制導航背景的漸變(也是核心,重點在這裏)。
核心代碼如下:
1.將顏色轉換為圖片
- (UIImage *)imageWithColor:(UIColor *)color { //創建1像素區域並開始圖片繪圖 CGRect rect = CGRectMake(0, 0, 1, 1); UIGraphicsBeginImageContext(rect.size); //創建畫板並填充顏色和區域 CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetFillColorWithColor(context, [color CGColor]); CGContextFillRect(context, rect); //從畫板上獲取圖片並關閉圖片繪圖 UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return image; }
2.滾動時調用改變導航漸變
- (void)changeColor:(UIColor *)color withScrollView:(UIScrollView *)scrollView andValud:(CGFloat)value{ /** if (scrollView.contentOffset.y < 0) { 慎重選擇這個,只適用於固定的導航欄,如果是自定義view效果會不一樣 //下拉時導航隱藏 self.hidden = YES; }else{ */ self.hidden = NO; //計算透明度 CGFloat alpha = scrollView.contentOffset.y /value > 1.0f ? 1 : scrollView.contentOffset.y/value; //設置顏色改為圖片 UIImage *image = [self imageWithColor:[color colorWithAlphaComponent:alpha]]; [self setBackgroundImage:image forBarMetrics:UIBarMetricsDefault]; self.translucent = alpha >=1.0f ? NO : YES; /* }*/ }
3.隱藏導航欄下的線
- (void)start{ UIImageView *shawImage = [self findNavLineImageOn:self]; shawImage.hidden = YES; self.translucent = YES; }
4.頁面消失後重置
(適用於導航欄不適用於自定義view) UIImageView *shawImage = [self findNavLineImageOn:self]; shawImage.hidden = NO; [self setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault]; self.translucent = NO;
5.參考文章:https://www.jianshu.com/p/10c71cb19b5e
iOS導航欄背景透明漸變