UITableView topview渐变的效果

//
//  ViewController.m
//  CDTableViewHeaderDemo
//
//  Created by Alex on 15/8/21.
//  Copyright (c) 2015年 Alex. All rights reserved.
//

#define KScreen_Width [UIScreen mainScreen].bounds.size.width
#define KScreen_Height [UIScreen mainScreen].bounds.size.height

#import "ViewController.h"



const CGFloat BackGroupHeight = 200;
const CGFloat HeadImageHeight= 80;

@interface ViewController ()<UITableViewDataSource,UITableViewDelegate,UIScrollViewDelegate>
{
    
    UITableView *demoTableView;
    
    UIImageView *imageBG;
    UIView *BGView;
    
    UIImageView *headImageView;
    UILabel *nameLabel;
    UILabel *titleLabel;
    
    UIButton *leftBtn;
    UIButton *rightBtn;
}
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.automaticallyAdjustsScrollViewInsets=NO;
    [self.navigationController.navigationBar setShadowImage:[[UIImage alloc] init]];
   
    
    
    [self setupUI];
}

-(void)setupUI
{
    demoTableView=[[UITableView alloc]init];
    demoTableView.delegate=self;
    demoTableView.dataSource=self;
    [demoTableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell"];
    demoTableView.frame=[UIScreen mainScreen].bounds;
    demoTableView.contentInset=UIEdgeInsetsMake(BackGroupHeight, 0, 0, 0);
    
    [self.view addSubview:demoTableView];
    
    //
    imageBG=[[UIImageView alloc]init];
    imageBG.frame=CGRectMake(0, -BackGroupHeight, KScreen_Width, BackGroupHeight);
    imageBG.image=[UIImage imageNamed:@"BGimage.jpg"];
    
    [demoTableView addSubview:imageBG];
//    demoTableView.tableHeaderView = imageBG;
    //
    BGView=[[UIView alloc]init];
    BGView.backgroundColor=[UIColor clearColor];
    BGView.frame=CGRectMake(0, -BackGroupHeight, KScreen_Width, BackGroupHeight);
    
    [demoTableView addSubview:BGView];
    
    //
    headImageView=[[UIImageView alloc]init];
    headImageView.image=[UIImage imageNamed:@"myheadimage.jpg"];
    headImageView.frame=CGRectMake((KScreen_Width-HeadImageHeight)/2, 50, HeadImageHeight, HeadImageHeight);
    
     
    
    [BGView addSubview:headImageView];
    
    //
    
    nameLabel=[[UILabel alloc]init];
    nameLabel.text=@"Alex";
    nameLabel.textAlignment=NSTextAlignmentCenter;
    nameLabel.frame=CGRectMake((KScreen_Width-HeadImageHeight)/2, CGRectGetMaxY(headImageView.frame), HeadImageHeight, 20);
    nameLabel.backgroundColor=[UIColor whiteColor];
    [BGView addSubview:nameLabel];
    
    
    titleLabel=[[UILabel alloc]initWithFrame:CGRectMake(0, 0, 100, 30)];
    titleLabel.textColor=[UIColor whiteColor];
    titleLabel.text=@"title";
   
    titleLabel.textAlignment=NSTextAlignmentCenter;
    
    self.navigationItem.titleView=titleLabel;
     titleLabel.alpha=0;
    
    leftBtn=[[UIButton alloc]initWithFrame:CGRectMake(0, 0, 40, 30)];
    [leftBtn setTitle:@"left" forState:UIControlStateNormal];
    [leftBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    [leftBtn addTarget:self action:@selector(leftBtnAction) forControlEvents:UIControlEventTouchUpInside];
    
    UIBarButtonItem *leftItem=[[UIBarButtonItem alloc]initWithCustomView:leftBtn];
    self.navigationItem.leftBarButtonItem=leftItem;
    
    rightBtn=[[UIButton alloc]initWithFrame:CGRectMake(0, 0, 40, 30)];
    [rightBtn setTitle:@"right" forState:UIControlStateNormal];
    [rightBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    [rightBtn addTarget:self action:@selector(rightBtnAction) forControlEvents:UIControlEventTouchUpInside];
    
    
    UIBarButtonItem *rightItem=[[UIBarButtonItem alloc]initWithCustomView:rightBtn];
    self.navigationItem.rightBarButtonItem=rightItem;

    
}



-(void)leftBtnAction
{
    NSLog(@"leftClick");
}


-(void)rightBtnAction
{
    NSLog(@"rightClick");
}




#pragma mark - tableViewDelegate&DataSource


-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 30;
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
    
    if (cell==nil) {
        cell=[[UITableViewCell alloc]init];
    }
    
    return cell;
}



-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    CGFloat yOffset  = scrollView.contentOffset.y;
    CGFloat xOffset = (yOffset + BackGroupHeight)/2;
    NSLog(@"%f",yOffset);
    if (yOffset < -BackGroupHeight) {
        
        CGRect rect = imageBG.frame;
        rect.origin.y = yOffset;
        rect.size.height =  -yOffset ;
        rect.origin.x = xOffset;
        rect.size.width = KScreen_Width + fabs(xOffset)*2;
        
        imageBG.frame = rect;
    }
    
    
    CGFloat alpha = (yOffset+BackGroupHeight)/BackGroupHeight;
    [self.navigationController.navigationBar setBackgroundImage:[self imageWithColor:[[UIColor orangeColor]colorWithAlphaComponent:alpha]] forBarMetrics:UIBarMetricsDefault];
    titleLabel.alpha=alpha;
    alpha=fabs(alpha);
    alpha=fabs(1-alpha);
   
    alpha=alpha<0.2? 0:alpha-0.2;
    
    
    BGView.alpha=alpha;


}


- (UIImage *)imageWithColor:(UIColor *)color
{
    // 描述矩形
    CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
    
    // 开启位图上下文
    UIGraphicsBeginImageContext(rect.size);
    // 获取位图上下文
    CGContextRef context = UIGraphicsGetCurrentContext();
    // 使用color演示填充上下文
    CGContextSetFillColorWithColor(context, [color CGColor]);
    // 渲染上下文
    CGContextFillRect(context, rect);
    // 从上下文中获取图片
    UIImage *theImage = UIGraphicsGetImageFromCurrentImageContext();
    // 结束上下文
    UIGraphicsEndImageContext();
    
    return theImage;
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
原文地址:https://www.cnblogs.com/lidongq/p/4792282.html