2011-05-11 57 views

回答

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; 
} 
+0

这是一个相当不错的答案和代码伙计.. a投票结果为u – 2011-05-11 11:53:04

+0

我们不喜欢Google的结果。我们喜欢你自己的答案。 – 2011-05-11 12:27:26

+0

嘿,这是我的答案<我没有从谷歌的副本 – Deepesh 2011-05-16 06:34:49