2011-09-10 18 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个滚动背景。 希望它可以帮助别人:)我现在完成了。

相关问题