iOS下拉tableView实现上面的图片放大效果

#import "ViewController.h"

#define kScreenbounds [UIScreen mainScreen].bounds

#define kScreenWidth [UIScreen mainScreen].bounds.size.width

#define kScreenHeight  [UIScreen mainScreen].bounds.size.height

// 宏定义一个高度

#define pictureHeight 200

@interface ViewController ()<UITableViewDataSource, UITableViewDelegate>

@property (nonatomic, strong) UITableView *tableView;

@property (nonatomic, strong) UIImageView *pictureImageView;

@property (nonatomic, strong) UIView *header;

@end


@implementation ViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    

    self.navigationItem.title = @"向下拉伸放大图片";

    // 下面两个属性的设置是与translucentNO,坐标变换的效果一样

    self.edgesForExtendedLayout = UIRectEdgeNone;

    self.automaticallyAdjustsScrollViewInsets = NO;

    [self createTableView];

    

}

- (void)createTableView

{

    self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight - 64) style:UITableViewStylePlain];

    _tableView.delegate = self;

    _tableView.dataSource = self;

    [_tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell"];

    

    // 添加头视图 在头视图上添加ImageView

    self.header = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, pictureHeight)];

    _pictureImageView = [[UIImageView alloc] initWithFrame:_header.bounds];

    _pictureImageView.image = [UIImage imageNamed:@"picture"];

    /* 

     重要的属性设置

     */

    //这个属性的值决定了 当视图的几何形状变化时如何复用它的内容 这里用 UIViewContentModeScaleAspectFill 意思是保持内容高宽比 缩放内容 超出视图的部分内容会被裁减 填充UIView

    _pictureImageView.contentMode = UIViewContentModeScaleAspectFill;

    // 这个属性决定了子视图的显示范围 取值为YES时,剪裁超出父视图范围的子视图部分.这里就是裁剪了_pictureImageView超出_header范围的部分.

    _pictureImageView.clipsToBounds = YES;

    [_header addSubview:_pictureImageView];

    self.tableView.tableHeaderView = _header;

    [self.view addSubview:_tableView];

    

}


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

{


    return 20;

}

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

{


    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];

    cell.textLabel.text = @"向下拉我";

    return cell;

}


- (void)scrollViewDidScroll:(UIScrollView *)scrollView

{

   

    /**

     *  这里的偏移量是纵向从contentInset算起 则一开始偏移就是0 向下为负 上为正 下拉

     */

   

    // 获取到tableView偏移量

    CGFloat Offset_y = scrollView.contentOffset.y;

    // 下拉 纵向偏移量变小 变成负的

        if ( Offset_y < 0) {

            // 拉伸后图片的高度

            CGFloat totalOffset = pictureHeight - Offset_y;

            // 图片放大比例

            CGFloat scale = totalOffset / pictureHeight;

            CGFloat width = kScreenWidth;

            // 拉伸后图片位置

            _pictureImageView.frame = CGRectMake(-(width * scale - width) / 2, Offset_y, width * scale, totalOffset);

        }


}


- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


@end


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值