下拉tableView放大图片

by admin on 2019年10月4日

//先实现 UIScrollViewDelegate  代理

//headVIewHeight : tableview 的头试图高度

//headView  : tableView 的头视图

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

CGFloat yOffset =tbView.contentOffset.y;

CGFloat nowHeight =fabs(yOffset) + headVIewHeight;

CGFloat nowWid = (nowHeight /headVIewHeight) *kDeviceWidth;

if (yOffset < 0)

{

[headView setFrame:CGRectMake(-(nowWid -kDeviceWidth) / 2.0,-(nowHeight
-headVIewHeight), nowWid, nowHeight)

}

#import “AppDelegate.h”

1.先设定头部imageView的原始大小
并且让imageView添加到头部View,这时候头部View最好是tableView的heightView.

在 UITableView 的头部添加一个 imageView,通过拉动 tableView
来放大缩小这个 imageView.

许久未发文章,文字都不会写了,来看效果吧

#import “RootViewController.h”

UIImageView *HeadImageView = [[UIImageView
alloc]initWithFrame:CGRectMake(0, 0, _headView.frame.size.width,
_headView.frame.size.height)];//此处的高为250

HeadImageView.image = [UIImage imageNamed:@”img_bg”];

[_headView addSubview:HeadImageView];

图片 120160527220410771.gif

  • ### 效果图:

@interface AppDelegate ()

在scView代理里面实现这行代码即可实现下拉放大

1.创建 tableView 的 headerView,并设置其frame,将背景色改为 clearColor;

图片 2gif1.gif图片 3gif2.gif

@end

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

CGFloat width = [UIScreen mainScreen].bounds.size.width;

CGFloat yOffset = scrollView.contentOffset.y  ;

//放图片的view有多大  这个的250这两个位置也一样改过来  三个数字一样

if (yOffset < 0) {

CGFloat totalOffset = 250 + ABS(yOffset);

CGFloat f = totalOffset / 250;

_imageView.frame = CGRectMake(- (width * f – width) / 2, yOffset,
width * f, totalOffset);

}

2.创建一个 UIImageView,与 tableViewHeaderView 一样大小;
  • ### 文件图

@implementation AppDelegate

}

3.创建一个 UIView,与tableView 一样大小;

图片 4文件图.png图片 5github路径.png

– (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

4.将 UIImageView 添加到 UIView 上,并将 UIView 设置为 tabelView 的 backgroundView 属性
    • >
    • ### 百度云盘:

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen
mainScreen] bounds]];

经过以上 4 个步骤的设置,就以保正 UIImage 始终在 tableView 下面,不会遮住 tableView;

 #import "TTAMineTableViewController.h"@interface TTAMineTableViewController ()@property (strong,nonatomic) UIImageView *imageView;@end@implementation TTAMineTableViewController- viewDidLoad { [super viewDidLoad]; // 创建一个 imageView 一张图,大小与 tableHeaderView 大小相同 UIImage *image = [UIImage imageNamed:@"hh"]; UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; imageView.frame = CGRectMake(0, 44, self.view.frame.size.width, 300); // 让图片内容按原图的比例放缩 imageView.contentMode = UIViewContentModeScaleAspectFill; // 声明一个属性,后面改变 imageView 大小的时候要用到 self.imageView = imageView; // 创建一个 背景 View,与屏幕一样大小 UIView *bgView = [[UIView alloc] initWithFrame:self.view.frame]; // 将 imageView 加到 bgView 上 [bgView addSubview:imageView]; // 将 bgView 设置为 tableView 的 backgroundView 属性 self.tableView.backgroundView = bgView; // 设置 tableHeaderView 并将背景色设置为透明 self.tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 300)]; [self.tableView.tableHeaderView setBackgroundColor:[UIColor clearColor]];} #pragma mark - Table view data source- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1;}- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return 20;}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"]; if  { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"]; } cell.textLabel.text = [NSString stringWithFormat:@"老司机老司机%zd",indexPath.row]; return cell;}-scrollViewDidScroll:(UIScrollView *)scrollView{ // 修改 imageView 的高 CGRect frame = self.imageView.frame; CGFloat offsetY = self.tableView.contentOffset.y; if(offsetY > 0){ frame.origin.y = -offsetY; }else{ // 向下拉时,放大,同时将 imageView 的顶部放在 y = 0 的位置 frame.origin.y = 0; // 修改 imageView 的高度,就可以放大图片了 frame.size.height = 300 - offsetY * 2; } self.imageView.frame = frame;}@end

后续有空补上介绍

// Override point for customization after application launch.

self.window.backgroundColor = [UIColor whiteColor];

RootViewController *rootViewVc = [[RootViewController alloc] init];

UINavigationController *rootNav = [[UINavigationController alloc]
initWithRootViewController:rootViewVc];

self.window.rootViewController = rootNav;

[self.window makeKeyAndVisible];

return YES;

}

#import “RootViewController.h”

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

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

const CGFloat TopViewH = 168; // 图片的高度

@interface RootViewController ()

@property (nonatomic,strong)UITableView *tableView;

@property (nonatomic,strong)UIImageView *topView;

@end

@implementation RootViewController

– (void)viewDidLoad {

[super viewDidLoad];

self.navigationController.navigationBar.translucent = NO;

self.navigationItem.title = @”tableView下拉放大图片”;

self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0,
KScreenWidth, KScreenHeight – 64) style:UITableViewStylePlain];

self.tableView.delegate = self;

self.tableView.dataSource = self;

[self.view addSubview:_tableView];

self.tableView.contentInset = UIEdgeInsetsMake(TopViewH * 1, 0, 0, 0);

self.topView = [[UIImageView alloc] init];

self.topView.image = [UIImage imageNamed:@”User_Profiles_bg.png”];

self.topView.frame = CGRectMake(0, -TopViewH, KScreenWidth, TopViewH);

self.topView.contentMode = UIViewContentModeScaleAspectFill;

[self.tableView addSubview:_topView];

[self.tableView insertSubview:_topView atIndex:0];

// Do any additional setup after loading the view.

}

– (void)scrollViewDidScroll:(UIScrollView *)scrollView

{

CGFloat down = – (TopViewH * 1) – scrollView.contentOffset.y;

if (down < 0) {

return;

}

CGRect frame = self.topView.frame;

frame.size.height = TopViewH + down * 5;// 系数 5 决定速度

self.topView.frame = frame;

}

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

{

return 20;

}

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

{

static NSString *identifier = @”cell”;

UITableViewCell *cell = [tableView
dequeueReusableCellWithIdentifier:identifier];

if (cell == nil) {

cell = [[UITableViewCell alloc]
initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:identifier];

}

cell.textLabel.text = [NSString
stringWithFormat:@”测试%ld”,indexPath.row];

return cell;

}

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图