2010-10-06 4 views
1

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

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

Я создал функцию под названием 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]; 

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

В моем методе loadView я просто называю эту функцию.

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

ответ

1

Вы можете получить ориентацию устройства, глядя на:

[UIDevice currentDevice].orientation 

или вы могли бы использовать self.interfaceOrientation для ViewController.

+0

, так что я мог бы, если заявление, что говорит что-то вроде если (self.interfaceOrientation = landscapeleft) {// changedimensions}; –

+0

yep, вы можете использовать функцию layoutSubviews для обновления ваших подзонов в соответствии с текущей ориентацией (она вызывается при изменении кадра [при повороте фрейма обычно изменяется :)] –

2

Вы можете сделать объекты без справочного наблюдателя для уведомления UIDeviceOrientationDidChangeNotification, которое будет опубликовано при каждом изменении ориентации.

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:UIDeviceOrientationDidChangeNotification object:nil]; 

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

Однако, вам нужно сказать устройство для создания таких уведомлений по телефону

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 

Не забудьте удалить объекты, которые наблюдают изменение ориентации на dealloc!

Надежда это было полезно, Pawel