標籤:分析 return 不用 文章 arm oat 繪圖 恢複 etc
重點分析:
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導覽列背景透明漸層