2

を使用しているときにUIScrollView設定していません。contentOffsetzoomToRect

中身がありますUIScrollViewUIImageViewこれまでのところ、スクロールとズーム自体は機能しています。ここで、アプリの開始時にスクロールビューに画像ビューの特定のズームされた長方形を指定します。このために実装zoomToRect:しましたが、zoomsScale正しく設定されていますが、が設定されていませんcontentOffset

使用時に期待される結果zoomToRectUIScrollView、選択した四角形に応じてズームインまたはズームアウトし、メソッドcontentOffsetに指定された四角形の原点座標に従って設定することです。 実際の動作では、正しい方向にズームしますが、myは常に原点0,0にあり、で指定したrectのx(475)およびy(520)の予想される原点ではありません。 私の画像サイズは1473x1473です。zoomToRect
zoomScaleUIImageViewzoomToRect

ここにいくつかのコードがあります

- (void)viewDidLoad {

    CGRect bounds = self.view.frame;

    _imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bgImage.png"]];

    self.containerView = [[UIView alloc] initWithFrame:bounds];
    _containerView.contentMode = UIViewContentModeCenter;

    _scrollView = [[UIScrollView alloc] initWithFrame:bounds];
    _scrollView.delegate = self;
    _scrollView.contentSize = _imageView.bounds.size;
    _scrollView.minimumZoomScale = 0.2;
    [_scrollView addSubview:_containerView];

    [_containerView addSubview:_imageView];

    [self.view addSubview:_scrollView];
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [_scrollView zoomToRect:CGRectMake(475.0, 150.0, 520.0, 747.0) animated:NO];
}

#pragma mark UIScrollViewDelegate methods
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
    return _containerView;
}

- (void)scrollViewDidZoom:(UIScrollView *)scrollView {

    [self printVisibleRectToConsole:scrollView];

    CGSize newImageViewSizeWithScale = CGSizeMake(_imageView.bounds.size.width * _scrollView.zoomScale,
                                 _imageView.bounds.size.height * _scrollView.zoomScale);
    _scrollView.contentSize = newImageViewSizeWithScale;
}

私の質問:

  • なぜzoomToRect設定しないのcontentOffsetですか?
  • どうすれば期待どおりzoomToRectに変更できcontentOffsetますか?
4

1 に答える 1

1

問題は、ズームしているビュー(containerView)が、そこに含まれている(実際にズームしたい)画像ビューほど大きくないことです。ビューコントローラのにframe設定されます。デフォルトではサブビューをクリップしないframeため、これは表示されません。UIView

containerView代わりに、画像ビューの境界で初期化する必要があります。

self.containerView = [[UIView alloc] initWithFrame:_imageView.bounds];
于 2012-09-11T13:04:56.780 に答える