美文网首页
ScrollView关于contentSize在缩放功能的问题

ScrollView关于contentSize在缩放功能的问题

作者: Johnny_Wu | 来源:发表于2019-06-06 16:39 被阅读0次

    最近在弄ScrollView的缩放功能,发现了一些问题,做了一些测试,总结一些吧。

        _scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)];
        _scrollView.maximumZoomScale=5;
        _scrollView.minimumZoomScale=1;
        _scrollView.delegate=self;
        _scrollView.bounces = NO;
        _scrollView.bouncesZoom = NO;
    
    //缩放对应的view
    -(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{
        //设置这个后,初始化的时候,contentSise会跟imgView.frame.size大小一样,缩放时候,imgView.bound的大小不会改变,只会改变frame
        return _imgView;
    }
    

    结论如下:

    1、开始创建ScrollView的时候,contentSize为0,第一次操作缩放是,contentSize会配置它的初始大小等于imgView.frame.size
    2、当使用_scrollView的缩放功能的时候,其实缩放的是contentSize,然后对应同时改变mgView.frame.size,记住imgView.bound的大小不会改变,只会改变frame
    3、contentView会根据当前缩放的view,改变它对应的contentOffset,来适应view。这点不好理解。view是添加在scollView上的,而不是contentView。举个例子吧,我想view一直在中间缩放:

    - (void)scrollViewDidZoom:(UIScrollView *)scrollView {
        
        CGFloat xcenter = scrollView.width/2 , ycenter = scrollView.height/2;
        self.imgView.center = CGPointMake(xcenter, ycenter);
    }
    

    这样确实是居中了,但会有个问题:放大超出边界后,往右和往下拖动都无效,图片感觉被截了。
    原因是,contentOffset的x,y都是0,那么前面的操作肯定滑动不了。因为view本身就居中于scrollView,缩放后,位置一直是这个,还在手指合理范围,所以content不会调整。
    正确做法是:

    - (void)scrollViewDidZoom:(UIScrollView *)scrollView {
        
        CGFloat xcenter = scrollView.width/2 , ycenter = scrollView.height/2;
        xcenter = scrollView.contentSize.width > scrollView.frame.size.width ? scrollView.contentSize.width/2 : xcenter;
        ycenter = scrollView.contentSize.height > scrollView.frame.size.height ? scrollView.contentSize.height/2 : ycenter;
        self.imgView.center = CGPointMake(xcenter, ycenter);
    },
    缩放的时候,系统会自动调整contentView的contentOffset位置,让它居中。所以我们只要跟随contentView变化,把我们缩放的view动态设置到contentView的中间就可以了。
    

    4、当view的竖向即将大于scollView的高度后,有可能会有一个向上跳动的动作,有可能是iphoneX才有的吧,暂时未知原因。(影响不大)
    5、contentView(不知道这样叫对不对),反正只是用它来控制滑动。默认的位置x=0,y=0。它的缩放,只会按比例往下跟往右延伸

    相关文章

      网友评论

          本文标题:ScrollView关于contentSize在缩放功能的问题

          本文链接:https://www.haomeiwen.com/subject/ylhsvqtx.html