UITableView下拉顶部放大实现

      很多APP都会有下拉顶部视图放大的效果,然后尝试实现了一下具体效果,下面我把我实现这个小功能的思路分享一下。

      首先说下这个功能的实现原理,其实很简单,就是根据TableView滑动时候的偏移量来改变要放大视图的frame。

实现效果图下:


实现思路:设置TableView为2个section,第一个section设置为透明色,同时创建要放大的UIImageView在section1位置,之后根据TableView滑动时候偏移量来改变要放大的UIImageView。

接下来直接贴代码:

#import "ViewController.h"#define ImageHeight  180.0#define ImageWidth    self.view.frame.size.width@interface ViewController (){

}

@property (nonatomic,strong) UIImageView    *orderImageView; /*要放大的ImageView*/

@property (nonatomic,strong) UITableView    *tableView;

@end

@implementation ViewController

#pragma mark -  viewDidLoad生命周期

- (void)viewDidLoad {

[super viewDidLoad];

[self createTableView];

}

- (void)createTableView{

_orderImageView  = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, ImageWidth, ImageHeight)];

_orderImageView.image = [UIImage imageNamed:@"123.jpg"];

_orderImageView.contentMode = UIViewContentModeScaleAspectFill;

[self.view addSubview:_orderImageView];

_tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height) style:UITableViewStylePlain];

_tableView.delegate = self;

_tableView.dataSource = self;

_tableView.backgroundColor = [UIColor clearColor];

[self.view addSubview:_tableView];

}

#pragma mark - UITableViewDelegate | UITableViewDataSource

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{

return 2;

}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

if (section == 0) {

return 1;

}

return 10;

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

static NSString *CellIdentifier = @"identifier";

UITableViewCell *cell = nil;

cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (!cell) {

cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

}

cell.selectionStyle = UITableViewCellSelectionStyleNone;

if (indexPath.section == 0) {

cell.backgroundColor = [UIColor clearColor];

}else{

cell.textLabel.text = @"cell";

}

return cell;

}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{

if (indexPath.section == 0) {

return ImageHeight;

}else{

return 50;

}

}

#pragma mark - 滑动表放大顶部图片操作

- (void)updateImg {

CGFloat yOffset  = _tableView.contentOffset.y;

if (yOffset < 0) {

CGFloat factor = ((ABS(yOffset)+ImageHeight)*ImageWidth)/ImageHeight;

CGRect frame = CGRectMake(-(factor-ImageWidth)/2, 0, factor, ImageHeight+ABS(yOffset));

self.orderImageView.frame = frame;

} else {

CGRect frame = self.orderImageView.frame;

frame.origin.y = -yOffset;

self.orderImageView.frame = frame;

}

}

#pragma mark - UIScrollViewDelegate

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {

/*随着表的偏移放大顶部图片*/

[self updateImg];

}

- (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

@end

当然这只是实现改小功能的方法之一,方法很多,关键看大家怎么实现。

如有不合理的地方还请大家指出 ^_^,共同进步~~~ 

你可能感兴趣的:(UITableView下拉顶部放大实现)