iOS ScrollView 下拉放大

定义变量

{
    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;
}
原文地址:https://www.cnblogs.com/buakaw/p/9055825.html