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)

扫描二维码关注公众号,回复: 144475 查看本文章

// 状态栏高度

#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;

}

猜你喜欢

转载自blog.csdn.net/saw471/article/details/80207681