2013-05-09 3 views
1

мое изображение отрезается с правой стороны после увеличения. Если я не устанавливаю смещение с помощью cgrect make, тогда он не обрезается, но я хочу, чтобы мой изображение будет центрировано на экране. как я могу сосредоточить свое изображение и не отрезать нужную часть после масштабирования?UIImageView обрезается с правой стороны внутри PageControl после масштабирования

- (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]; 
} 

EDIT: вот моя точка зрения иерархии

  • Посмотреть
    • mainScrollView
      • innerScrollFrame
        • pageScrollView
          • imageForZooming
      • innerScrollFrame
        • pageScrollView
          • imageForZooming

ответ

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); 
} 

я нашел ответ здесь: Center content of UIScrollView when smaller

так, что изображение будет в центре после масштабирования вместо применения смещения, которое было первоначально применено. работал как шарм. теперь, когда я увеличиваю масштаб, ни одно из моих изображений не отключается ни на одном из элементов управления страницей, и я могу центрировать изображение в начале представления.