用编程方式的pagecontrol滚动视图?

时间:2011-05-11 11:18:23

标签: iphone

我想以编程方式使用pagecontrol创建scrollView。我怎么能这样做?

1 个答案:

答案 0 :(得分:4)

#pragma mark -
#pragma mark loadGalleryView

-(void) loadGalleryView{
    galleryArr = [memberDic objectForKey:@"arrKey"];

    if ([galleryArr count]%5 != 0) 
    {
        noOfPages = ([galleryArr count]/5)+1;
    }
    else 
    {
        noOfPages = [galleryArr count]/5;
    }


    viewControllers = [[NSMutableArray alloc] init];
    for (int i=0; i<noOfPages; i++) 
    {
        [viewControllers addObject:[NSNull null]];
    }

    [galleryScrollView setPagingEnabled:TRUE];

    [galleryScrollView setContentSize:CGSizeMake(self.view.frame.size.width* noOfPages,69.0f)];
    [galleryScrollView setShowsHorizontalScrollIndicator:FALSE];
    [galleryScrollView setShowsVerticalScrollIndicator:FALSE];
    [galleryScrollView setScrollsToTop:FALSE];
    [galleryScrollView setDelegate:self];

    [pageControl setNumberOfPages:noOfPages];
    [pageControl setCurrentPage:0];

    [self loadScrollViewWithPage:0];
    [self loadScrollViewWithPage:1];
}

//-----------------Load scroll View----------------------------------

-(void) loadScrollViewWithPage:(int) page{
    if (page < 0) 
    {
        return;
    }

    if (page >= noOfPages) 
    {
        return;
    }

    GalleryViewController *givc = [viewControllers objectAtIndex:page];
    if ((NSNull *)givc == [NSNull null]) 
    {
        givc = [[GalleryViewController alloc] initWithPageNumber:page];
        givc.imageArr = [galleryArr retain];
        [viewControllers replaceObjectAtIndex:page withObject:givc];
        [givc release];
    }

    if (nil == givc.view.superview) 
    {
        CGRect frame = self.view.frame;

        frame.origin.x = frame.size.width * page;
        frame.origin.y = 0.0f;
        givc.view.frame = frame;
        [galleryScrollView addSubview:givc.view];
    }
}

- (void)scrollViewDidScroll:(UIScrollView *)sender {
    // We don't want a "feedback loop" between the UIPageControl and the scroll delegate in
    // which a scroll event generated from the user hitting the page control triggers updates from
    // the delegate method. We use a boolean to disable the delegate logic when the page control is used.
    // Switch the indicator when more than 50% of the previous/next page is visible
    CGFloat pageWidth = galleryScrollView.frame.size.width;
    int page = floor((galleryScrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
    pageControl.currentPage = page;

    // load the visible page and the page on either side of it (to avoid flashes when the user starts scrolling)
    [self loadScrollViewWithPage:page - 1];
    [self loadScrollViewWithPage:page];
    [self loadScrollViewWithPage:page + 1];

    // A possible optimization would be to unload the views+controllers which are no longer visible
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    isPageControlUsed = NO;
}


in gallary View Controller in .m file

- (void)viewDidLoad {
    [super viewDidLoad];

    float x = 7.0f;

    for (int i = (pageNumber*5); i<(pageNumber+1)*5; i++) 
    {
        if (i<[imageArr count]) 
        {
            NSString *url = [imageArr objectAtIndex:i];

            MyImageView *imgView = [[MyImageView alloc] initWithFrame:CGRectMake(x, 7.5f, 55.0f, 55.0f)];
            [imgView addImageFrom:url];
            [self.view addSubview:imgView];
            [imgView release];

            x = x+62.5f;
        }

    }

}

-(id)initWithPageNumber:(int) page{
    if (self = [super initWithNibName:@"GalleryViewController" bundle:nil]) 
    {
        pageNumber = page;
    }
    return self;
}