iOS tableView实现头部拉伸并改变导航条渐变色

Nissa ·
更新时间:2024-11-10
· 780 次阅读

本文实例为大家分享了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,g,b) RGBA(r,g,b,1.0f) #define ZhuTiColor RGB(76,16,198) #define ZhuTiColorAlpha(alpha) RGBA(76, 16, 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, 1, 0.1); } return _mengView; } -(UIView *)headerBackView { if (!_headerBackView) { _headerBackView = [[UIView alloc] initWithFrame:CGRectMake(0, 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; } 您可能感兴趣的文章:iOS 设置导航条透明效果的实例代码iOS 隐藏导航条和状态栏实现方法iOS仿网易新闻滚动导航条效果



渐变色 导航条 IOS 拉伸

需要 登录 后方可回复, 如果你还没有账号请 注册新账号