2010-10-06 92 views
1

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

我的两难困境是,当生成这些子视图时,他们并没有真正的参考,所以在我的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}; – 2010-10-06 16:20:11

+0

是的,你可以使用layoutSubviews函数根据当前的方向更新你的子视图(它会在帧更改时调用[当你旋转帧通常改变:)] – 2010-10-06 20:45:50

2

您可以在没有参考观察者的情况下为UIDeviceOrientationDidChangeNotification通知制作对象,该通知将在每个方向更改中发布。

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

然后,在您的orientationChanged:方法中,您可以检查当前的方向并相应地布置您的视图。

但是,你需要通过调用

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 

一定要删除正在观察在dealloc的方向改变的对象,告诉该设备产生这样的通知!

希望这是有帮助的, 帕维尔