zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    【Rust】元组匹配
    数据结构之选择排序 安静点
    数据结构之归并排序 安静点
    数据结构之插入排序 安静点
    数据结构之冒泡排序 安静点
    今日进度
    今日进度
    今日进度
    今日进度
    今日进度
  • 原文地址:https://www.cnblogs.com/buakaw/p/9055825.html
Copyright © 2011-2022 走看看