2012-11-29 3 views
3

UICollectionView으로 갤러리를 만들고 plist 파일에서 이미지 세트를로드합니다. 사용자가 각 셀을 터치하면 전체 화면 이미지가로드됩니다 (iPhone의 사진 애플리케이션과 동일). PhotosViewerController에서 다음iOS - plist 데이터에서 이미지 스크롤

:

-(void) creatContentWithNumerOfPage: (NSInteger) numberOfPage andCurrentPage: (NSInteger) currentPage andImageArray:(NSArray *)imageArray { 

    self.pageControl.numberOfPages = numberOfPage; 
    self.pageControl.currentPage = currentPage; 
    [pageScrollView setContentSize:CGSizeMake(self.view.frame.size.width * pageControl.numberOfPages, self.view.frame.size.height)]; 
    pageScrollView.delegate = self; 
    [self.view addSubview: pageScrollView]; 


    NSMutableArray *mArray = [[NSMutableArray alloc] initWithCapacity:thumbnailViewController.imageArray.count]; 
    for (int i = 0; i <= thumbnailViewController.imageArray.count; i++) 
    { 

     NSDictionary *picturesDictionary = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Photos" ofType:@"plist"]]; 
     imageArray = [picturesDictionary objectForKey:@"PhotosArray"]; 

     fullScreen = [[UIImageView alloc]initWithImage:[UIImage imageNamed:[imageArray objectAtIndex:currentPage]]]; 
     [fullScreen setContentMode:UIViewContentModeScaleAspectFit]; 
     fullScreen.frame = self.view.frame; 

     [mArray addObject:fullScreen]; 
     [pageScrollView addSubview:fullScreen]; 
    } 

} 

편집 : (솔루션)

내가 사진을 전체 화면 될 때 스크롤과 다른 이미지를 볼 수있는 문제에 직면 한 여기 내 코드입니다
-(void) creatContentWithImages:(NSArray*)imageArray andCurrentPage:(NSInteger)currentPage{ 

    self.pageControl.numberOfPages = imageArray.count; 
    self.pageControl.currentPage = currentPage; 
    [self.pageScrollView setContentSize:CGSizeMake(self.pageScrollView.frame.size.width * imageArray.count, self.pageScrollView.frame.size.height)]; 


    for (int i = 0; i < imageArray.count; i++) 
    { 


     NSDictionary *picturesDictionary = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Photos" ofType:@"plist"]]; 
     imageArray = [picturesDictionary objectForKey:@"PhotosArray"]; 

     fullScreen = [[UIImageView alloc]initWithImage:[UIImage imageNamed:[imageArray objectAtIndex:i]]]; 


     [fullScreen setContentMode:UIViewContentModeScaleAspectFit]; 
     fullScreen.frame = CGRectMake(i*self.pageScrollView.frame.size.width, 0, self.pageScrollView.frame.size.width, self.pageScrollView.frame.size.height); 

     [self.pageScrollView addSubview:fullScreen]; 
    } 

    [self scrollToPage:currentPage animated:NO]; 

} 
+0

나는 당신의 명성을보고 있었고 나는 지구상에서 3 개의 담당자와 함께 4 개의 금색과 15 개의 은색 배지를 가지고 있었는지 궁금해하고있었습니다 ... 그리고 나서 나는 이해했습니다. –

+0

@ H2CO3 그래서 뭐야? !! – Momi

+0

당신은 500을 가지고 있었지만 현상금은 그것을 전부 가져갔습니다. –

답변

2

코드는

  • 우리가 self.view.frame 또는 self.pageScrollView.frame의 실제 값을 기대할 수 없다 creatContentWithImagesviewDidLoad 방법 전에이 시점에서 당신은 전화, 당신이 그것을 호출해야 예를 들어, 문제의 여지가 이후/이후 viewDidLoad. 아마 다음과 같이 : 당신은 항상 currentPage 대신 바르 i의를 사용하는 사이클

    [self presentViewController:photosViewController animated:YES completion:^{ 
        [photoViewController creatContentWithImages:images andCurrentPage:row]; 
    }]; 
    
  • 당신은 creatContentWithNumerOfPage 방법 만이 배열은 새로운 데이터로 여기 오버라이드 (override)되는 몇 가지 이유
    (I에 imageArray을 보내
    동일한 데이터로 가정)
  • [self.view addSubview:
    pageScrollView]
    을 수행하는 이유는 프로그래밍 방식으로 작성된 UIScrollView입니까? 그러나 그것은 어떤 장소에서 일어날까요?
  • 프레임을 사용하여 작업 할 때UIView가 아닌 ​​UIScrollView 프레임을 사용해야합니다. 그러면 스크롤 크기가 UIView와 다를 경우
    디자인도 손상됩니다.

내가 그것을 변경하고 몇 가지 개선, 그래서 이것 살펴 보자했습니다 당신은 여전히 ​​질문이있을 경우

#import "PhotosViewerController.h" 
@implementation PhotosViewerController 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

-(void) creatContentWithImages:(NSArray*)imageArray andCurrentPage:(NSInteger)currentPage{ 
// I create UIScrollView programmatically, if you want to use xib then just remove lines with RM comment. 
// There are two views in xib hierarchy - UIScrollView downward and UIPageView above 

    self.pageScrollView = [[UIScrollView alloc] initWithFrame:self.view.frame]; //RM 
    self.pageScrollView.pagingEnabled = YES; //RM 

    self.pageControl.numberOfPages = imageArray.count; 
    self.pageControl.currentPage = currentPage; 
    [self.pageScrollView setContentSize:CGSizeMake(self.pageScrollView.frame.size.width * imageArray.count, self.pageScrollView.frame.size.height)]; 

    self.pageScrollView.delegate = self;//RM 
    [self.view insertSubview:self.pageScrollView atIndex:0]; //RM 

    for (int i = 0; i < imageArray.count; i++) //not <=, just < 
    { 
     UIImage *img = [imageArray objectAtIndex:i];// not sure whether imageArray contains UIImage's or NSString, so if here NSString the create UIImage in appropriate manner. I've tested it with UIImage's 
     UIImageView *fullScreen = [[UIImageView alloc] initWithImage:img]; 
     [fullScreen setContentMode:UIViewContentModeScaleAspectFit]; 
     fullScreen.frame = CGRectMake(i*self.pageScrollView.frame.size.width, 0, self.pageScrollView.frame.size.width, self.pageScrollView.frame.size.height); 

     [self.pageScrollView addSubview:fullScreen]; 
    } 

    [self scrollToPage:currentPage animated:NO]; // scroll to corresponding page 
} 

- (void)scrollViewDidScroll: (UIScrollView *) sView 
{ 
    CGFloat offset = self.pageScrollView.contentOffset.x; 
    CGFloat pageSize = self.pageScrollView.frame.size.width; 

    int page = floor((offset + (pageSize/2))/pageSize); 
    self.pageControl.currentPage = page; 
} 

- (IBAction)changeThePage:(id)sender 
{ 
    NSLog(@"Change"); 
    [self scrollToPage:self.pageControl.currentPage animated:YES]; 
} 

- (void)scrollToPage:(NSInteger)page animated:(BOOL)animated{ 
    CGRect pageRect = CGRectMake(page * self.pageScrollView.frame.size.width, 0, self.pageScrollView.frame.size.width, self.pageScrollView.frame.size.height);  
    [self.pageScrollView scrollRectToVisible: pageRect animated: animated]; 

    [self.pageControl setCurrentPage:page]; 
} 
@end 

후 알려주세요 (나는 모든 전체 PhotosViewerController.m 파일을 게시)하고, 나는 너를 도우 려한다.

+0

Thankks !!!! 하지만 코드를 약간 변경합니다. D 수정 된 코드를 체크하고, 이제는 제대로 작동합니다! – Momi