首页 > 系统 > iOS > 正文

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

2019-10-21 18:41:13
字体:
来源:转载
供稿:网友

本文实例为大家分享了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;}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持VEVB武林网。


注:相关教程知识阅读请移步到IOS开发频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表