欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2023-12-14 14:02:28
本文实例为大家分享了ios实现下拉图片放大效果展示的具体代码,供大家参考,具体内容如下 #import "viewcontroller.h" #define k...

本文实例为大家分享了ios实现下拉图片放大效果展示的具体代码,供大家参考,具体内容如下

#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 = @"向下拉伸放大图片";
  // 下面两个属性的设置是与translucent为no,坐标变换的效果一样
  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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

上一篇:

下一篇: