contentSizeズーム機能についてScrollViewの質問

最近では、いくつかの問題を発見したいくつかのテストをした、それのいくつかを要約し、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にその初期サイズが等しく設定されます
ズーム機能_scrollViewを使用する場合2、、実際には、スケーリングは、contentSizeありますその後、対応する変更mgView.frame.size同時に、そのサイズはimgView.boundを変更しない、それが唯一のフレームに変更されます覚えて
ビューに適応するために、それに対応するcontentOffsetを変更、3、現在のズームビューに基づいてcontentViewを。これはよく理解されていません。ビューはscollView、ないcontentViewに追加されます。例えば、私は途中でスケーリングされた表示したいと思います:

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

これは確かに、中心ですが、問題がある:右に範囲外の増幅と無効であるを下にドラッグし、カットアップされている感を描きます。
その理由は、contentOffset xにおいて、yは0であることが、以前の動作が確かにスライドありません。ビュー自体がscrollViewを中心とされているので、スケーリング後、位置は常にこのことをされている、指まだ合理的な範囲、内容が調整されないようにします。
正しいアプローチは、次のとおりです。

- (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);
},
这样,感觉是把view靠右边设置了,缩放会一直往右边移动。但运动是相对的,为了使view在缩放手指的范围内,显得不突兀,那么也可以通过调整content的位置,让它往左移动。
4、当view的竖向即将大于scollView的高度后,有可能会有一个向上跳动的动作,有可能是iphoneX才有的吧,暂时未知原因。
5、contentView(不知道这样叫对不对),反正只是用它来控制滑动。默认的位置x=0,y=0。它的缩放,只会按比例往下跟往右延伸

ます。https://www.jianshu.com/p/c50aca9036adで再現

おすすめ

転載: blog.csdn.net/weixin_34198797/article/details/91084942