将子视图添加到具有其他子视图的scrollview

时间:2012-07-26 10:22:10

标签: iphone ios uiscrollview frame subview

我根据for循环中的数组元素的数量向我的scrollview添加子视图。容器视图里面有一个额外的子视图。问题是只有第一个容器视图包含添加的子视图而新的子视图不包含但第三个也有它。我检查了子视图的框架,但似乎仍然不起作用。

CGFloat contentOffset = 0.0f;
//add tej views one by one to scrollview

for (NSString *packageType in packageTypesArray) 
{

    CGRect lvPackageContainerFrame = CGRectMake(contentOffset, 0.0f,scrollView.frame.size.width,scrollView.frame.size.height);

    LVPackageContainer *lvPackageContainer = [[LVPackageContainer alloc] initWithFrame:lvPackageContainerFrame];

    NSLog(@"Frame %@",NSStringFromCGRect(lvPackageContainerFrame));
    lvPackageContainer.packageType = packageType;
    [packageContainersArray addObject:lvPackageContainer];

     UIImageView *backgroundImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 264, 314)];
     NSLog(@"BackgroundImage %@",backgroundImage);
     backgroundImage.backgroundColor = [UIColor redColor];
     [backgroundImage setImage:[UIImage imageNamed:@"shadowBackground.png"]];
     backgroundImage.center = lvPackageContainer.center;
     [lvPackageContainer addSubview:backgroundImage];


    [scrollView addSubview:lvPackageContainer];

    contentOffset += lvPackageContainerFrame.size.width;
    scrollView.contentSize = CGSizeMake(contentOffset, scrollView.frame.size.height);

}   

1 个答案:

答案 0 :(得分:1)

backgroundImage.center = CCGPointMake(lvPackageContainerFrame.size.width/2, lvPackageContainerFrame.size.height/2);

如果添加子视图,坐标系将从其父视图

开始

在你的情况下,当你为第二个视图设置中心时,它会变成{480,240}(假设iphone中的视图全屏) 因此,您可以看到第3个子视图实际上是第2页的子视图。

更新: 当您获得视图的中心时,它实际上是根据帧值计算的:

center.x = (frame.origin.x + frame.size.width) / 2;
center.y = (frame.origin.y + frame.size.height) / 2;

因此,假设您的第二个视图位于CGRectMake(320, 0, 320, 480),其中心位于

center.x = (320 + 320) / 2;
center.y = (0 + 480) / 2;

因此,您的子视图将位于第二个视图的{480,240}处。

如果您将其相对于滚动视图进行转换,则子视图将位于{(320+480),(0+240)},您将看到它位于第3个视图上,而不是第2个视图