2016-03-06 4 views
1

Я хочу увеличить/уменьшить UIScrollView, содержащий UIImageView. С моим кодом ниже я могу только прокрутить содержимое прокрутки, но не могу его увеличить.iOS - UIScrollView может прокручивать, но не может увеличивать

Моя точка зрения иерархия выглядит следующим образом:

- (UIView *) containerView 
-- (UIView *) contentView 
--- (UIScrollView *) scrollView 
---- (UIImageView *) self.imageView 

Код:

UIView *previousContentView = nil; 

     for (NSInteger i = 0; i < 2; i++) { 
      contentView = [self addRandomColoredView]; 
      [containerView addSubview:contentView]; 
      [containerView.topAnchor constraintEqualToAnchor:contentView.topAnchor].active = true; 
      [containerView.bottomAnchor constraintEqualToAnchor:contentView.bottomAnchor].active = true; 

      scrollView = [self addRandomScrollView]; 
      [contentView addSubview:scrollView]; 

      self.imageView = [[UIImageView alloc] init]; 
      [self.imageView setImage:[imagesArray objectAtIndex:i]]; 
      [self.imageView setTranslatesAutoresizingMaskIntoConstraints:false]; 
      [scrollView addSubview:self.imageView]; 

      if (previousContentView) { 
       [VerticalSeparatorView addSeparatorBetweenView:previousContentView secondView:contentView]; 
       NSLayoutConstraint *width = [contentView.widthAnchor constraintEqualToAnchor:previousContentView.widthAnchor]; 
       width.priority = 250; 
       width.active = true; 
      } else { 
       [containerView.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor].active = true; 
      } 

      [contentView.topAnchor constraintEqualToAnchor:scrollView.topAnchor].active = true; 
      [contentView.bottomAnchor constraintEqualToAnchor:scrollView.bottomAnchor].active = true; 
      [contentView.leadingAnchor constraintEqualToAnchor:scrollView.leadingAnchor].active = true; 
      [contentView.trailingAnchor constraintEqualToAnchor:scrollView.trailingAnchor].active = true; 

      [scrollView.topAnchor constraintEqualToAnchor:self.imageView.topAnchor].active = true; 
      [scrollView.bottomAnchor constraintEqualToAnchor:self.imageView.bottomAnchor].active = true; 
      [scrollView.leadingAnchor constraintEqualToAnchor:self.imageView.leadingAnchor].active = true; 
      [scrollView.trailingAnchor constraintEqualToAnchor:self.imageView.trailingAnchor].active = true; 

      previousContentView = contentView; 
     } 
     [containerView.trailingAnchor constraintEqualToAnchor:previousContentView.trailingAnchor].active = true; 

- (UIView *)addRandomColoredView 
{ 
    UIView *someView = [[UIView alloc] init]; 
    someView.translatesAutoresizingMaskIntoConstraints = false; 
    [someView setBackgroundColor:[UIColor blackColor]]; 
    return someView; 
} 

-(UIScrollView *)addRandomScrollView 
{ 
    UIScrollView *scrollView = [[UIScrollView alloc] init]; 
    [scrollView setDelegate:self]; 
    [scrollView setTranslatesAutoresizingMaskIntoConstraints:false]; 
    [scrollView setBackgroundColor:[UIColor colorWithRed:arc4random_uniform(256)/255.0 green:arc4random_uniform(256)/255.0 blue:arc4random_uniform(256)/255.0 alpha:1.0]]; 
    [scrollView setMaximumZoomScale:2.5f]; 
    [scrollView setMinimumZoomScale:0.5f]; 
    [scrollView setZoomScale:scrollView.minimumZoomScale]; 
    return scrollView; 
} 

#pragma mark - UIScrollViewDelegate 
-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 
{ 
    return self.imageView; 
} 

Я считаю, что Scrollview получает его contentSize, потому что он показывает изображение, и я могу прокручивать. Почему я не могу увеличить или уменьшить масштаб?

ответ

1

Вы должны указать делегат для вашего зрения прокрутки, а затем реализовать viewForZoomingInScrollView сказать ему, чтобы увеличить вид изображения:

- (UIView *)addScrollViewWithImageView { 
    UIScrollView *scrollView = [[UIScrollView alloc] init]; 
    scrollView.translatesAutoresizingMaskIntoConstraints = false; 
    scrollView.maximumZoomScale = 200.0; 
    scrollView.minimumZoomScale = 0.1; 
    scrollView.delegate = self; 

    UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"test.png"]]; 
    imageView.translatesAutoresizingMaskIntoConstraints = false; 

    [self.view addSubview:scrollView]; 

    [scrollView addSubview:imageView]; 

    [NSLayoutConstraint activateConstraints:@[ 
     [imageView.topAnchor constraintEqualToAnchor:scrollView.topAnchor], 
     [imageView.leftAnchor constraintEqualToAnchor:scrollView.leftAnchor], 
     [imageView.rightAnchor constraintEqualToAnchor:scrollView.rightAnchor], 
     [imageView.bottomAnchor constraintEqualToAnchor:scrollView.bottomAnchor] 
    ]]; 

    return scrollView; 
} 

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { 
    return scrollView.subviews.firstObject; 
} 

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

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    UIView *previousContentView = nil; 

    for (NSInteger i = 0; i < 3; i++) { 
     UIView *contentView = [self addScrollViewWithImageView]; 
     [self.view.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor].active = true; 
     [self.view.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor].active = true; 
     if (previousContentView) { 
      [HorizontalSeparatorView addSeparatorBetweenView:previousContentView secondView:contentView]; 
      NSLayoutConstraint *height = [contentView.heightAnchor constraintEqualToAnchor:previousContentView.heightAnchor]; 
      height.priority = 250; 
      height.active = true; 
     } else { 
      [self.view.topAnchor constraintEqualToAnchor:contentView.topAnchor].active = true; 
     } 
     previousContentView = contentView; 
    } 
    [self.view.bottomAnchor constraintEqualToAnchor:previousContentView.bottomAnchor].active = true; 
} 
+0

Спасибо за ваш ответ Rob. Это очень помогло мне. У меня все работает так, как сейчас. Можете ли вы посоветовать мне сосредоточить свой контент scrollview при масштабировании с помощью автоматического макета? Это возможно? Я попытался установить ширину, высоту, центр XAnchor, центр YAnchor для ширины прокрутки, высоты, centerXAnchor, centerYAnchor соответственно. Это поможет только в режиме просмотра изображения, когда он не увеличен. – imstillalive

0

Попробуйте MWPhotoBrowser. Он имеет встроенные функции прокрутки и масштабирования. Вы получите больше, чем вам нужно. Удачи.

+0

Я создаю коллаж изображений, а не браузер для фотографий ??? – imstillalive

+0

Apple предоставила образец кода PhotoScroller в соответствии с вашими потребностями. Я делюсь с тобой. https://developer.apple.com/library/ios/samplecode/PhotoScroller/Introduction/Intro.html –

Смежные вопросы