2011-09-10 20 views
0

我想顯示3個UIScrollViewControllers在3個橫向條紋3倍的屏幕寬滾動獨立的相同的窗口。實現此目的的代碼如下,但由於某些原因,它不起作用,只顯示上面的條紋。多個UIScrollViewControllers在同一個窗口,有些不顯示他們的視圖

藉助於我放置在窗口上的附加白色背景視圖的幫助,我可以看到屏幕的其他2個區域也可以滾動,但由於某種原因,它們的背景顏色沒有顯示出來......我可以'弄清楚爲什麼。

下面是代碼:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    // Creating the window programmatically 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

    CGRect bounds = [self window].bounds; 

    float x = bounds.origin.x; 
    float y = bounds.origin.y; 
    float w = bounds.size.width; 
    float h = bounds.size.height; 

    CGRect upperFrame = CGRectMake(x,y,w,h/3); 
    CGRect middleFrame = CGRectMake(x,y + h/3,w,h/3); 
    CGRect lowerFrame = CGRectMake(x, y + 2 * h/3, w, h/3); 

    // Creating the scroll view which will contain the 3 views 
    UIScrollView *upperScrollView = [[UIScrollView alloc] initWithFrame:upperFrame]; 
    UIScrollView *middleScrollView = [[UIScrollView alloc] initWithFrame:middleFrame]; 
    UIScrollView *lowerScrollView = [[UIScrollView alloc] initWithFrame:lowerFrame]; 

    // ContentSize should be wide enough for 3 pages 
    [upperScrollView setContentSize:CGSizeMake(3 * w, h/3)]; 
    [middleScrollView setContentSize:CGSizeMake(3 * w, h/3)]; 
    [lowerScrollView setContentSize:CGSizeMake(3 * w, h/3)]; 

    // Enforce the display of only one page at a time 
    [upperScrollView setPagingEnabled:YES]; 
    [middleScrollView setPagingEnabled:YES]; 
    [lowerScrollView setPagingEnabled:YES]; 

    // UPPER SCROLLVIEW 

    // This will be the first view (red) 
    UIView *redViewU = [[UIView alloc] initWithFrame:upperFrame]; 
    [redViewU setBackgroundColor:[UIColor redColor]]; 

    // The second view will start horizontally when the first view ends 
    upperFrame.origin.x += w; 

    // This will be the second view (green) 
    UIView *greenViewU = [[UIView alloc] initWithFrame:upperFrame]; 
    [greenViewU setBackgroundColor:[UIColor greenColor]]; 

    // The third view will start horizontally when the second view ends 
    upperFrame.origin.x += w; 

    // This will be the third view (blue) 
    UIView *blueViewU = [[UIView alloc] initWithFrame:upperFrame]; 
    [blueViewU setBackgroundColor:[UIColor blueColor]]; 

    // Adding the 3 views to the scroll view 
    [upperScrollView addSubview:redViewU]; 
    [upperScrollView addSubview:greenViewU]; 
    [upperScrollView addSubview:blueViewU]; 

    // Now creating the view controller, father of the scrollview 
    UIViewController *upperViewController = [[UIViewController alloc] init]; 
    [upperViewController setView:upperScrollView]; 

    // MIDDLE SCROLLVIEW 

    // This will be the first view (red) 
    UIView *redViewM = [[UIView alloc] initWithFrame:middleFrame]; 
    [redViewM setBackgroundColor:[UIColor redColor]]; 

    // The second view will start horizontally when the first view ends 
    middleFrame.origin.x += w; 

    // This will be the second view (green) 
    UIView *greenViewM = [[UIView alloc] initWithFrame:middleFrame]; 
    [greenViewM setBackgroundColor:[UIColor greenColor]]; 

    // The third view will start horizontally when the second view ends 
    middleFrame.origin.x += w; 

    // This will be the third view (blue) 
    UIView *blueViewM = [[UIView alloc] initWithFrame:middleFrame]; 
    [blueViewM setBackgroundColor:[UIColor blueColor]]; 

    // Adding the 3 views to the scroll view 
    [middleScrollView addSubview:redViewM]; 
    [middleScrollView addSubview:greenViewM]; 
    [middleScrollView addSubview:blueViewM]; 

    // Now creating the view controller, father of the scrollview 
    UIViewController *middleViewController = [[UIViewController alloc] init]; 
    [middleViewController setView:middleScrollView]; 

    // LOWER SCROLLVIEW 

    // This will be the first view (red) 
    UIView *redViewL = [[UIView alloc] initWithFrame:lowerFrame]; 
    [redViewL setBackgroundColor:[UIColor redColor]]; 

    // The second view will start horizontally when the first view ends 
    lowerFrame.origin.x += w; 

    // This will be the second view (green) 
    UIView *greenViewL = [[UIView alloc] initWithFrame:lowerFrame]; 
    [greenViewL setBackgroundColor:[UIColor greenColor]]; 

    // The third view will start horizontally when the second view ends 
    lowerFrame.origin.x += w; 

    // This will be the third view (blue) 
    UIView *blueViewL = [[UIView alloc] initWithFrame:lowerFrame]; 
    [blueViewL setBackgroundColor:[UIColor blueColor]]; 

    // Adding the 3 views to the scroll view 
    [lowerScrollView addSubview:redViewL]; 
    [lowerScrollView addSubview:greenViewL]; 
    [lowerScrollView addSubview:blueViewL]; 

    // Now creating the view controller, father of the scrollview 
    UIViewController *lowerViewController = [[UIViewController alloc] init]; 
    [lowerViewController setView:lowerScrollView]; 

    // A white background view to see at least the scroll indicators 
    UIView *whiteView = [[UIView alloc] initWithFrame:bounds]; 
    [whiteView setBackgroundColor:[UIColor whiteColor]]; 

    // Finally the window will hold the view controllers' views 
    [[self window] addSubview:whiteView]; 
    [[self window] addSubview:upperViewController.view]; 
    [[self window] addSubview:middleViewController.view]; 
    [[self window] addSubview:lowerViewController.view]; 

    // Displaying the window 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

回答

0

解決:成功做與IB同樣的事情,我意識到,由於某種原因的UIScrollView裏面的觀點要相對後面的x,y座標及其框架,不是絕對的。

更改的與以下(同樣爲每一個的UIScrollView)上面的代碼視圖幀:

CGRect redViewFrame = CGRectMake(x,y,w,h/3); 
CGRect greenViewFrame = CGRectMake(w,y,w,h/3); 
CGRect blueViewFrame = CGRectMake(2 * w,y,w,h/3); 

解決這個問題,現在我可以看到3個滾動背景。 希望它可以幫助別人:)我現在完成了。

相關問題