定义变量
{
UIImageView *_zoomView;
BOOL _zoomIn;
CGSize _contentSize;
CGFloat _zoomHeight;
BOOL _decelerating;
}
初始化
UIImage *img = [UIImage imageNamed:@"blackeye.jpg"];
_contentSize = CGSizeMake(0, img.size.height);
_zoomHeight = 200;
self.scrollView.contentInset = UIEdgeInsetsMake(_zoomHeight, 0, 0, 0);
_zoomView = [[UIImageView alloc] initWithFrame:CGRectMake(0, -_zoomHeight, self.scrollView.bounds.size.width, 200)];
_zoomView.backgroundColor = [UIColor purpleColor];
[self.scrollView addSubview:_zoomView];
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, img.size.width, img.size.height)];
imageView.image = img;
[self.scrollView addSubview:imageView];
self.scrollView.contentSize = _contentSize;
self.scrollView.delegate = self;
处理滚动
#pragma mark - ScrollView Delegate
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
CGFloat offsetY = scrollView.contentOffset.y;
NSLog(@"offsetY: %f",offsetY);
CGFloat top = scrollView.contentInset.top;
if (!_zoomIn) {
if (offsetY < -top) { // 下拉
CGRect frame = _zoomView.frame;
frame.origin.y = offsetY;
frame.size.height = -offsetY;
_zoomView.frame = frame;
if (!_decelerating && -offsetY > 1.9 * _zoomHeight) {
scrollView.contentInset = UIEdgeInsetsMake(scrollView.bounds.size.height, 0, 0, 0);
frame.origin.y = -scrollView.bounds.size.height;
frame.size.height = scrollView.bounds.size.height;
_zoomView.frame = frame;
_zoomIn = YES;
scrollView.contentSize = CGSizeMake(0, 1); // 使上拉有弹簧效果
}
}
} else { // 上拉
if (!_decelerating && (offsetY + top) / top > 0.3) {
scrollView.contentInset = UIEdgeInsetsMake(_zoomHeight, 0, 0, 0);
CGRect frame = _zoomView.frame;
frame.origin.y = -_zoomHeight;
frame.size.height = _zoomHeight;
_zoomView.frame = frame;
_zoomIn = NO;
scrollView.contentSize = CGSizeMake(0, _contentSize.height); // 恢复正常
}
}
}
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView {
_decelerating = YES;
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
_decelerating = NO;
}