本文实例为大家分享了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;}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。
新闻热点
疑难解答