1

ズームインした後、画像の右側が切り取られます。 cgrect make でオフセットを設定しないと、画像は切り取られませんが、画像を画面の中央に配置したいと考えています。画像を中央に配置し、ズーム後に右側の部分が切り取られないようにするにはどうすればよいですか?

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

self.view.backgroundColor = [UIColor grayColor];

UIScrollView *mainScrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds];
mainScrollView.pagingEnabled = YES;
mainScrollView.showsHorizontalScrollIndicator = NO;
mainScrollView.showsVerticalScrollIndicator = NO;

CGRect innerScrollFrame = mainScrollView.bounds;

for (NSInteger i = 0; i < 2; i++) {
    UIImageView *imageForZooming = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[NSString stringWithFormat:@"page%d", i + 1]]];
    imageForZooming.tag = VIEW_FOR_ZOOM_TAG;
    imageForZooming.frame = CGRectMake(50, 0, imageForZooming.bounds.size.width, imageForZooming.bounds.size.height);

    UIScrollView *pageScrollView = [[UIScrollView alloc] initWithFrame:innerScrollFrame];
    pageScrollView.minimumZoomScale = 0.5f;
    pageScrollView.maximumZoomScale = 1.0f;
    pageScrollView.contentSize = imageForZooming.bounds.size;
    pageScrollView.delegate = self;
    [pageScrollView addSubview:imageForZooming];

    [mainScrollView addSubview:pageScrollView];

    if (i < 1) {
        innerScrollFrame.origin.x += innerScrollFrame.size.width;
    }

    pageScrollView.zoomScale = 0.5f;
}

mainScrollView.contentSize = CGSizeMake(innerScrollFrame.origin.x + innerScrollFrame.size.width, mainScrollView.bounds.size.height);

[self.view addSubview:mainScrollView];
}

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
return [scrollView viewWithTag:VIEW_FOR_ZOOM_TAG];
}

編集:これが私のビュー階層です

  • 意見
    • mainScrollView
      • innerScrollFrame
        • pageScrollView
          • imageForZooming
      • innerScrollFrame
        • pageScrollView
          • imageForZooming
4

1 に答える 1

2

将来同じ問題を抱えている他の人のために、私がしたことは、次の UIScrollViewDelegate プロトコルを追加することでした:

- (void)scrollViewDidZoom:(UIScrollView *)scrollView {
    UIView *subView = [scrollView.subviews objectAtIndex:0];
    CGFloat offsetX = (scrollView.bounds.size.width > scrollView.contentSize.width) ? (scrollView.bounds.size.width - scrollView.contentSize.width) * 0.5 : 0.0;
    CGFloat offsetY = (scrollView.bounds.size.height > scrollView.contentSize.height) ? (scrollView.bounds.size.height - scrollView.contentSize.height) * 0.5 : 0.0;
    subView.center = CGPointMake(scrollView.contentSize.width * 0.5 + offsetX, 
        scrollView.contentSize.height * 0.5 + offsetY);
}

私はここで答えを見つけました: UIScrollView のコンテンツを小さくすると中央に表示されます

最初に適用されたオフセットを適用する代わりに、ズーム後に画像が中央に配置されるようにします。魅力のように働きました。ズームしても、どちらのページ コントロールでも画像が切り取られることはなく、画像をビューの先頭に中央揃えすることができます。

于 2013-05-10T16:21:43.260 に答える