在实际开发中,会员中心的界面经常会涉及到头部视图拉伸的效果(有时商品详情界面也会涉及),下面提供的封装不超过20行代码,都可以看懂,方便大家再使用的时候明白其中的原理,好了!废话不多说~代码不多,喜欢的朋友可以自己封装一遍!同样喜欢的话就动动手指点个❤哦~
以下封装的代码总共不超过20行,下面详细介绍实现的原理:
TableHeaderViewZoom.h
#import <Foundation/Foundation.h>
#import<UIKit/UIKit.h>
@interface TableHeaderViewZoom : NSObject
@property (nonatomic,retain) UITableView* tableView;
@property (nonatomic,retain) UIView* view;
@property (nonatomic, assign) CGFloat viewHeight;
//实现下面的方法
-(void)TableHeaderViewZoom:(UITableView*)tableView WithView:(UIView*)view AndViewHeight:(CGFloat)viewHeight;
- (void)scrollViewDidScroll:(UIScrollView*)scrollView;
@end
TableHeaderViewZoom.m
#import "TableHeaderViewZoom.h"
@implementation TableHeaderViewZoom
@synthesize tableView = _tableView;
@synthesize view = _view;
-(void)TableHeaderViewZoom:(UITableView *)tableView WithView:(UIView *)view AndViewHeight:(CGFloat)viewHeight{
_tableView = tableView;
_view = view;
_viewHeight = viewHeight;
//利用内嵌添加头部视图
self.view.frame = CGRectMake(0, -_viewHeight, [UIScreen mainScreen].bounds.size.width, _viewHeight);
//添加到TableView之上
[self.tableView addSubview:self.view];
//放到图层的最后
[self.tableView sendSubviewToBack:self.view];
//修改内嵌值
self.tableView.contentInset = UIEdgeInsetsMake(_viewHeight, 0, 0, 0);
}
- (void)scrollViewDidScroll:(UIScrollView*)scrollView
{
if (scrollView.contentOffset.y < -_viewHeight) {
//往上移动10个单位
//position 相当于UIView的center
self.view.layer.position = CGPointMake([UIScreen mainScreen].bounds.size.width / 2.0, scrollView.contentOffset.y / 2.0);
//设置一个放大系数:(fabs是取绝对值)
CGFloat scale = fabs(scrollView.contentOffset.y) / _viewHeight;
//触发放大缩小
self.view.transform = CGAffineTransformMakeScale(scale, scale);
}else{
}
}
@end
用法:
- (void)viewDidLoad {
[super viewDidLoad];
//初始化一个头部视图的对象
self.headerView = [HomeHeaderView homeHeaderView];
//初始化一个拉伸对象
self.Zoom = [[TableHeaderViewZoom alloc]init];
/**
* 参数一:tableView对象
参数二:HeaderView对象
参数三: headerView的高度
*/
//此处调用该方法即可
[self.Zoom TableHeaderViewZoom:self.mainTableView WithView:self.headerView AndViewHeight:180.0f];
}
//实现该方法监听拉伸事件
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
[self.Zoom scrollViewDidScroll:scrollView];
}
我是Qinz,希望我的文章对你有帮助。