UIScrollView Проблемы с вращением - PullRequest
4 голосов
/ 12 октября 2010

У меня есть прокрутка, которая автоматически генерирует серию подпредставлений, содержащих изображения.Концепция заключается в том, что это в значительной степени пользовательский читатель в стиле PDF, где каждая страница загружается в изображение в виде изображения.Есть три «слоя» - внешний UIScrollView, автоматически сгенерированные subViews и viewview внутри subview.

У меня были некоторые проблемы с этим, я задавал вопрос ранее, но, к сожалению,Суть моего вопроса была не в том месте.Вот моя вторая попытка:

При повороте все поворачивается по мере необходимости.К сожалению, это то, что я получаю: 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];
    }
}

Как мне переопределить размер кадра?Какую функцию я должен вызывать и т. Д. Как отцентрировать изображение?

Я новичок в этом, поэтому я прошу прощения за неоднозначность моего вопроса.

Приветствия

Ответы [ 2 ]

3 голосов
/ 19 октября 2010

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

Первый шаг к этому пришел, потому что я понял, что янужно было перебрать и изменить размер каждого фрейма для каждой из моих страниц, а затем повторно применить фреймы к представлению.Чтобы это произошло, мне нужно было создать массив, который я бы заполнил в цикле 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 голос
/ 27 января 2014

Это сработало для меня:

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

По сути, я устанавливаю смещение содержимого для нового размера содержимого прокрутки перед поворотом (я переключаю высоту и ширину для ожидаемой высоты и ширины).

Это сработало для меня при повороте полноэкранного постраничного просмотра UIScrollView.

Все постраничные подпредставления имеют следующую маску автоматического изменения размера, поэтому после поворота они аккуратно встают на свои места:

UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleRightMargin
...