本文实例为大家分享了iOS tableView实现头部拉伸改变,导航条渐变色的具体代码,供大家参考,具体内容如下
- #import "TableViewController.h"
- static NSString *ident = @"cell";
- #define RGBA(r,g,b,a) [UIColor colorWithRed:r/255.0f green:g/255.0f blue:b/255.0f alpha:a]
- #define RGB(r,b) RGBA(r,1.0f)
- #define ZhuTiColor RGB(76,16,198)
- #define ZhuTiColorAlpha(alpha) RGBA(76,198,alpha)
- // 判断是否是iPhone X
- #define iPhoneX ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125,2436),[[UIScreen mainScreen] currentMode].size) : NO)
- // 状态栏高度
- #define STATUS_BAR_HEIGHT (iPhoneX ? 44.f : 20.f)
- // 导航栏高度
- #define NAVIGATION_BAR_HEIGHT (iPhoneX ? 88.f : 64.f)
- // tabBar高度
- #define TAB_BAR_HEIGHT (iPhoneX ? (49.f + 34.f) : 49.f)
- // home indicator
- #define HOME_INDICATOR_HEIGHT (iPhoneX ? 34.f : 0.f)
- #define ScreenWidth ([UIScreen mainScreen].bounds.size.width)
- #define ScreenHeight ([UIScreen mainScreen].bounds.size.height)
- #define imageHight 200
- @interface TableViewController ()
- @property (nonatomic,strong) UIImageView *headImage;
- @property (nonatomic,strong) UIView *headerBackView;
- @property (nonatomic,strong) UIView *mengView;
- @end
- @implementation TableViewController
- - (void)viewDidLoad {
- [super viewDidLoad];
- [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:ident];
- self.view.backgroundColor = [UIColor redColor];
- self.tableView.tableHeaderView = self.headerBackView;
- [self.headerBackView addSubview:self.headImage];
- [self.headImage addSubview:self.mengView];
- [self navCleanFromAlpha:0];
- }
- -(void)navCleanFromAlpha:(CGFloat)alpha
- {
- [self.navigationController.navigationBar setBackgroundImage:[self createImageWithColor:ZhuTiColorAlpha(alpha)] forBarMetrics:UIBarMetricsDefault];
- self.navigationController.navigationBar.shadowImage = [UIImage new];
- }
- -(UIImage*) createImageWithColor:(UIColor*) color
- {
- CGRect rect=CGRectMake(0.0f,0.0f,1.0f,1.0f);
- UIGraphicsBeginImageContext(rect.size);
- CGContextRef context = UIGraphicsGetCurrentContext();
- CGContextSetFillColorWithColor(context,[color CGColor]);
- CGContextFillRect(context,rect);
- UIImage *theImage = UIGraphicsGetImageFromCurrentImageContext();
- UIGraphicsEndImageContext();
- return theImage;
- }
- -(UIImageView *)headImage
- {
- if(!_headImage)
- {
- _headImage= [[UIImageView alloc]initWithFrame: self.headerBackView.bounds];
- _headImage.image = [UIImage imageNamed:@"1024"];
- }
- return _headImage;
- }
- -(UIView *)mengView
- {
- if (!_mengView)
- {
- _mengView = [[UIView alloc]initWithFrame:self.headerBackView.bounds];
- _mengView.backgroundColor = RGBA(1,1,0.1);
- }
- return _mengView;
- }
- -(UIView *)headerBackView
- {
- if (!_headerBackView)
- {
- _headerBackView = [[UIView alloc] initWithFrame:CGRectMake(0,ScreenWidth,imageHight)];
- [_headerBackView setBackgroundColor:[UIColor lightGrayColor]];
- }
- return _headerBackView;
- }
- - (void)didReceiveMemoryWarning {
- [super didReceiveMemoryWarning];
- // Dispose of any resources that can be recreated.
- }
- - (void)scrollViewDidScroll:(UIScrollView *)scrollView
- {
- //---------------------- 图片拉升 -------------------------
- //图片高度
- CGFloat imageHeight = self.headerBackView.frame.size.height;
- //图片宽度
- CGFloat imageWidth = ScreenWidth;
- //图片上下偏移量
- CGFloat imageOffsetY = scrollView.contentOffset.y;
- // NSLog(@"图片上下偏移量 imageOffsetY:%f ->",imageOffsetY);
- //上移
- if (imageOffsetY < 0)
- {
- CGFloat totalOffset = imageHeight + ABS(imageOffsetY);
- CGFloat f = totalOffset / imageHeight;
- self.headImage.frame = CGRectMake(-(imageWidth * f - imageWidth) * 0.5,imageOffsetY,imageWidth * f,totalOffset);
- self.mengView.frame = self.headImage.bounds;
- }
- //------------------- 导航条颜色渐变 ----------------------------
- CGFloat tableViewOffsetY = [self.tableView rectForSection:0].origin.y - NAVIGATION_BAR_HEIGHT;
- CGFloat contentOffsetY = scrollView.contentOffset.y;
- if (contentOffsetY >= tableViewOffsetY)
- {
- // scrollView.contentOffset = CGPointMake(0,tableViewOffsetY); //定位
- [self navCleanFromAlpha:1];
- }
- else
- {
- CGFloat alpha = scrollView.contentOffset.y/imageHight;
- if (alpha >= 1) { alpha = 1; }
- if (alpha <= 0) { alpha = 0; }
- NSLog(@"%.2f",alpha);
- [self navCleanFromAlpha:alpha];
- }
- }
- - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
- return 20;
- }
- - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
- UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ident forIndexPath:indexPath];
- // Configure the cell...
- cell.textLabel.text = [NSString stringWithFormat:@"asdada = %zd",indexPath.row];
- return cell;
- }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。