UIScrollView旋转问题

UIScrollView旋转问题

问题描述:

我有一个滚动视图,它会自动生成一系列包含图像视图的子视图。其概念是,它几乎是一个自定义PDF风格的阅读器,其中每个页面都作为图像加载到imageview中。有三个“图层” - 外部UIScrollView,子视图内自动生成的子视图和图像视图。UIScrollView旋转问题

我一直有一些麻烦,我以前问过这个问题,但不幸的是,我的问题的核心是在错误的地方。这是我的第二次尝试:

在旋转时,所有内容都根据需要旋转。不幸的是,这是我得到: alt text

显然,我希望图像1居中,并没有图像2的提示,直到你轻扫视图。

这里是我的设置视图代码:

- (void)loadView { 
    [self setUpView]; 
} 
- (void)setUpView { 
    //INITIALISE PAGING SCROLL VIEW 
    CGRect pagingScrollViewFrame = [[UIScreen mainScreen] bounds]; 
    pagingScrollViewFrame.origin.x -= 10; 
    pagingScrollViewFrame.size.width += 20; 
    pagingScrollView = [[UIScrollView alloc] initWithFrame:pagingScrollViewFrame]; 
    pagingScrollView.contentMode = UIViewContentModeScaleAspectFit; 

    //CONFIGURE PAGING SCROLL VIEW 
    pagingScrollView.pagingEnabled = YES; 
    pagingScrollView.backgroundColor = [UIColor blackColor]; 
    pagingScrollView.contentSize = CGSizeMake(pagingScrollViewFrame.size.width*7, pagingScrollViewFrame.size.height); 

    //ACTIVATE PAGING SCROLL VIEW 
    self.view = pagingScrollView; 

    //ADD PAGES TO SCROLL VIEW 
    for (int i = 0; i < 7; i++){ 
     ImageScrollView *page = [[[ImageScrollView alloc] init] autorelease]; 
     [self configurePage:page forIndex:i]; 
     [pagingScrollView addSubview:page]; 
    } 
} 

如何重新定义帧的大小?我应该调用什么函数等等。我如何使图像居中?

我是新来的,所以我很抱歉我的问题的含糊之处。

干杯

我已经想通了。这是我需要改变的单个页面的框架,所以(在另一个问题的帮助下),我写了一个重新定位的方法。

这是因为我发现我需要遍历并为每个页面重新调整每个框架的大小,然后将这些框架重新应用于视图。为了做到这一点,我需要创建一个数组,我将填入上面的For循环。我共有7页。

然后,我可以(上旋转)拨打下方重新定向的方法来重新大小每个视图:

- (void) reOrient{ 
    if(UIInterfaceOrientationIsPortrait(self.interfaceOrientation)){  
     CGRect f; 
     int i = 0; 
     for (ImageScrollView *page in pageArray) {   
      f = page.frame; 
      f.size.width = 320; 
      f.origin.x = (f.size.width * i); 
      page.frame = f; 
      pagingScrollView.contentSize = CGSizeMake(f.size.width * 7, 480); 
      i++; 
     } 
    }else{ 
     CGRect f; 
     int i = 0; 
     for (ImageScrollView *page in pageArray) {   
      f = page.frame; 
      f.size.width = 480; 
      f.origin.x = (f.size.width * i); 
      page.frame = f; 
      pagingScrollView.contentSize = CGSizeMake(f.size.width * 7, 480); 
      i++; 
     } 
    } 
} 
+1

'pagingScrollView.contentSize = CGSizeMake(f.size.width * 7,480);'没有按不需要在for循环中为每个页面执行它。 – mahboudz 2012-09-13 18:50:31

这为我工作:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{ 
    [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration]; 

    //get current page based on offset before rotation  
    NSInteger currentPage = self.scrollView.contentOffset.x/self.scrollView.bounds.size.width; 

    //set anticipated scrollview content size by switching width and height (they will be switched after rotation) 
    [self.scrollView setContentSize:CGSizeMake(totalPages * self.view.bounds.size.height, self.view.bounds.size.width)]; 

    //set the anticipated content offset based on height before rotation 
    [self.scrollView setContentOffset:CGPointMake(currentPage * self.scrollView.bounds.size.height, 0.0f)]; 
} 

基本上我设置内容在旋转之前对新的scrollview内容大小进行偏移(我正在为预期的高度和宽度切换高度和宽度)。

这对我旋转全屏分页UIScrollView时工作。

所有寻呼子视图的具有以下自动尺寸调整掩模,使得它们整齐旋转后落入地方:

UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleRightMargin