UIImageView内部的scrollView与屏幕旋转

时间:2015-09-05 12:36:13

标签: objective-c

在这个问题上工作了2天,我无法理解。

我的所有视图中都有一个UIScrollView,我将其添加为subViews随机数UIImageView s,我正在启用分页,因此它看起来像一个图库应用。< / p>

我的问题是当我旋转屏幕时,图像帧保持不变(这可能是因为约束)所以我试图给出图像约束并且它工作时它们会完美旋转然后出现问题滚动的地方视图不再滚动,图像在彼此之上..

这是我的代码:

-(void)setupScrollView
{
    for(int i = 0 ; i < [_arrayOfImages count] ; i++)
    {
        UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(self.view.frame.size.width*i, 0, self.view.frame.size.width, self.view.frame.size.height)];
        [imageView setImage:[[_arrayOfImages objectAtIndex:i] getImageForImageView:imageView]];
        [imageView setUserInteractionEnabled:YES];
        [imageView setContentMode:UIViewContentModeScaleAspectFit];

        [imageView setTranslatesAutoresizingMaskIntoConstraints:NO];

        [_scrollView addSubview:imageView];

        [self.view addConstraint:[NSLayoutConstraint constraintWithItem:imageView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeading multiplier:1.f constant:0.f]];
        [self.view addConstraint:[NSLayoutConstraint constraintWithItem:imageView attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTrailing multiplier:1.f constant:0.f]];
        [self.view addConstraint:[NSLayoutConstraint constraintWithItem:imageView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.f constant:0.f]];
        [self.view addConstraint:[NSLayoutConstraint constraintWithItem:imageView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1.f constant:0.f]];
    }
    [_scrollView setContentSize:CGSizeMake(self.view.frame.size.width*[_arrayOfImages count], self.view.frame.size.height)];
}

有人能帮帮我吗?感谢

2 个答案:

答案 0 :(得分:2)

您需要在Autorotate委托方法中更改UIScrollView和UIImageViews的框架。之后,您必须更改UIScrollView的ContentSize。

- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientat‌​ion{}
  //ios 7
   -(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrient‌​ation{}
   duration:(NSTimeInterval)duration -
   -(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOri‌​entation{}
   //ios 8 
-(void)viewWillTransitionToSize:(CGSize)size
   withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator{
   if (size.width > size.height) { 
      // Positions for Landscape 
   } else {
     // Positions for Portrait 
   }
}

答案 1 :(得分:0)

我不太确定,因为我需要查看所有应用程序,但您可以尝试使用代码

-(void)setupScrollView
{
    for(int i = 0 ; i < [_arrayOfImages count] ; i++)
    {
        UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(self.view.frame.size.width*i, 0, self.view.frame.size.width, self.view.frame.size.height)];
        [imageView setImage:[[_arrayOfImages objectAtIndex:i] getImageForImageView:imageView]];
        [imageView setUserInteractionEnabled:YES];
        [imageView setContentMode:UIViewContentModeScaleAspectFit];

        [imageView setTranslatesAutoresizingMaskIntoConstraints:NO];

        [_scrollView addSubview:imageView];
        [imageViewArray addObject:imageView]

        if (i == 0) {
            [self.view addConstraint:[NSLayoutConstraint constraintWithItem:imageView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeading multiplier:1.f constant:0.f]];
            [self.view addConstraint:[NSLayoutConstraint constraintWithItem:imageView attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTrailing multiplier:1.f constant:0.f]];
            [self.view addConstraint:[NSLayoutConstraint constraintWithItem:imageView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.f constant:0.f]];
            [self.view addConstraint:[NSLayoutConstraint constraintWithItem:imageView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1.f constant:0.f]];
        } else {
            UIImageView * previousView = [imageViewArray objectAtIndex:i-1];

            [self.view addConstraint:[NSLayoutConstraint constraintWithItem:imageView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:previousView attribute:NSLayoutAttributeLeading multiplier:1.f constant:0.f]];
            [self.view addConstraint:[NSLayoutConstraint constraintWithItem:imageView attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:previousView attribute:NSLayoutAttributeTrailing multiplier:1.f constant:0.f]];
            [self.view addConstraint:[NSLayoutConstraint constraintWithItem:imageView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:previousView attribute:NSLayoutAttributeTop multiplier:1.f constant:0.f]];
            [self.view addConstraint:[NSLayoutConstraint constraintWithItem:imageView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:previousView attribute:NSLayoutAttributeBottom multiplier:1.f constant:0.f]];
        }
    }

    [_scrollView setContentSize:CGSizeMake(self.view.frame.size.width*[_arrayOfImages count], self.view.frame.size.height)];
}

此外,您需要将imageViewArray声明为NSMutableArray

添加到@interface

NSMutableArray * imageViewArray;

并在viewDidLoad中:

imageViewArray = [[NSMutableArray alloc] init];