scrollview下拉放大效果,继承viewcontrolle
自己为了方便需要下拉放大的控制器封装的,继承即可,比较方便
头文件(.h文件)
#import "BaseViewController.h"
@interfaceBaseHeaderZoomController :BaseViewController
@property (nonatomic, strong) UITableView *tableView;
/** 设置头部View高度 */
@property (nonatomic, assign) CGFloat headerZoomViewH;
/** 设置背景图 */
@property(nonatomic,strong)UIImage*headerBackgroundImage;
@end
.m文件
#import "BaseHeaderZoomController.h"
#import "TableHeaderZoomView.h"
@interface BaseHeaderZoomController ()
@property(nonatomic,strong)TableHeaderZoomView*tableHeaderZoomView;
@end
@implementationBaseHeaderZoomController
- (void)viewDidLoad {
[super viewDidLoad];
[self.viewaddSubview:self.tableView];
// Do any additional setup after loading the view, typically from a nib.
}
#pragma mark -- UIScrollViewDelegate
- (void)scrollViewDidScroll:(UIScrollView*)scrollView {
CGFloatoffsetY = scrollView.contentOffset.y;
if(offsetY <= -self.headerZoomViewH) {
CGRectframe =self.tableHeaderZoomView.frame;
//改变HeadImageView的frame
//上下放大
frame.origin.y= offsetY;
frame.size.height= -offsetY;
//左右放大
frame.origin.x= (offsetY *SCREEN_WIDTH/self.headerZoomViewH+SCREEN_WIDTH) /2;
frame.size.width= -offsetY *SCREEN_WIDTH/self.headerZoomViewH;
//改变头部视图的frame
self.tableHeaderZoomView.frame= frame;
}
if(offsetY < -50) {
// TODO:下拉刷新
}
CGFloatcolorChangeContentOffset =100-self.headerZoomViewH;
if(offsetY > colorChangeContentOffset) {
doublealpha = (offsetY-colorChangeContentOffset)/64.0;
if(alpha <0.05) {
alpha =0;
}
if(alpha >0.95) {
alpha =1;
}
self.topbarview.backgroundColor= [UIColorcolorWithWhite:1.0alpha:alpha];
}else{
self.topbarview.backgroundColor = [UIColor clearColor];
}
}
#pragma mark - set
- (void)setHeaderZoomViewH:(CGFloat)headerZoomViewH {
_headerZoomViewH= headerZoomViewH;
[self.tableView addSubview:self.tableHeaderZoomView];
//设置属性
self.tableView.contentInset = UIEdgeInsetsMake(self.headerZoomViewH, 0, 0, 0);
[self.tableView setContentOffset:CGPointMake(0, -self.headerZoomViewH)];
}
- (void)setHeaderBackgroundImage:(UIImage*)headerBackgroundImage {
_headerBackgroundImage= headerBackgroundImage;
self.tableHeaderZoomView.headerBackgroundImage = headerBackgroundImage;
}
#pragma mark - get
- (UITableView*)tableView {
if(!_tableView) {
_tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT) style:UITableViewStyleGrouped];
_tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
_tableView.estimatedRowHeight = 0;
_tableView.estimatedSectionFooterHeight = 0;
_tableView.estimatedSectionHeaderHeight = 0;
}
return _tableView;
}
- (TableHeaderZoomView*)tableHeaderZoomView {
if (!_tableHeaderZoomView) {
_tableHeaderZoomView = [[TableHeaderZoomView alloc] initWithFrame:CGRectMake(0, - self.headerZoomViewH, SCREEN_WIDTH, self.headerZoomViewH)];
}
return _tableHeaderZoomView;
}
@end
tableHeaderZoomView文件里没什么内容(也顺便贴上)
@interfaceTableHeaderZoomView :UIView
@property(nonatomic,strong)UIImage*headerBackgroundImage;
@end
@interface TableHeaderZoomView()
@property(nonatomic,strong)UIImageView*backgroundImageV;
@end
@implementationTableHeaderZoomView
- (instancetype)initWithFrame:(CGRect)frame {
if(self== [superinitWithFrame:frame]) {
[self setupSubviews];
}
return self;
}
- (void)setupSubviews {
[self addSubview:self.backgroundImageV];
[self.backgroundImageV mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(self);
}];
}
#pragma mark - set
- (void)setHeaderBackgroundImage:(UIImage*)headerBackgroundImage {
_headerBackgroundImage= headerBackgroundImage;
self.backgroundImageV.image= headerBackgroundImage;
}
#pragma mark - get
-(UIImageView*)backgroundImageV {
if (!_backgroundImageV) {
_backgroundImageV = [UIImageView new];
_backgroundImageV.contentMode = UIViewContentModeScaleAspectFill;
_backgroundImageV.image = [UIImage imageNamed:@"wallet_headerbg"];
}
return _backgroundImageV;
}
@end