2015-04-23 110 views
-1

所以我通過放置調整大小的圖像來做我的第一個UIScrollview,但是當我到達第一組結果的末尾並添加第二組時,該視圖重置爲開始。我不確定它是否添加圖像,因爲x值正確地向前計數,所以UIScrollview應該調整大小,所以我只能假定它只是將下一組圖像放在舊圖像的頂部。用水平無窮風格滾動添加圖像到UIScrollview

我在這裏做錯了什麼?

-(void)addScrollViewImages { 
    // setup our UIScrollview 
    self.scrollView.delegate = self; 
    self.scrollView.pagingEnabled = YES; 
    self.scrollView.showsHorizontalScrollIndicator = NO; 
    self.scrollView.showsVerticalScrollIndicator = NO; 
    self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width,self.scrollView.frame.size.height); 

    // hit our server for the data 
    NSString *encodedKeywords =[self.keyword stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
    self.results = [self fetchImageResults:encodedKeywords]; 

    // loop over some image results 
    for (id image in self.results) 
    { 
     UIImageView *imageView = [[UIImageView alloc] initWithFrame: CGRectMake(self.x, 0, self.screenWidth, self.screenHight)]; 

     NSString *imageUrl = image[@"url"]; 
     NSData *image = [NSData dataWithContentsOfURL:[NSURL URLWithString:imageUrl]]; 

     // resize the image to the device 
     [imageView setImage:[self imageScaleCropToSize:[UIImage imageWithData:image]]]; 

     [self.scrollView addSubview: imageView]; 
     self.x = (self.x + imageView.frame.size.width); 

     // resize frame width 
     if(self.x > self.view.frame.size.width) self.scrollView.contentSize = CGSizeMake(self.x, self.scrollView.frame.size.height); 
    } 
} 
// This just gets the json data and processes it a little 
-(NSArray*)fetchImageResults:(NSString*)keyword { 
    //This should be fairly quick 
    NSError *error = nil; 
    NSURL *apiURL = [NSURL URLWithString:[NSString stringWithFormat:@"http://example.com/api/v1/search?q=%@", keyword]]; 
    NSData *jsonData = [NSData dataWithContentsOfURL:apiURL]; 
    NSDictionary *result = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error]; 
    return result[@"results"]; 
} 
// Scroll index management 
- (void)scrollViewDidScroll:(UIScrollView *)sender { 
    float indexNum = self.scrollView.contentOffset.x/self.scrollView.frame.size.width; 
    if(floor(indexNum) == indexNum) { 
     int num = (int)indexNum; 

     NSLog(@"viewing %@",self.results[num]); 

     // if we are at the end, load more 
     if(num == (self.results.count-1)) { 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       [self addScrollViewImages]; 
      }); 
     } 
    } 
} 
+0

我覺得代碼是正確的。試着在添加ImageView之前嘗試調整幀寬度,即將此代碼稍微移動一下if(self.x> self.view.frame.size.width)self.scrollView.contentSize = CGSizeMake(self.x,self.scrollView '''' –

+0

我認爲你應該認真考慮使用'UITableView'。你可以在單獨的'UITableViewCell'中顯示每個圖像(可能是你自己設計的一個自定義的'UITableViewCell'子類)。爲什麼?因爲UITableView已被設計爲通過其「可重用單元」功能輕鬆顯示無限(或至少非常大)的對象列表。它會爲你節省大量的工作。如果您對UITableView不熟悉,請查看關於此類(及其數據源和委託)的Apple文檔以獲取詳細信息。特別注意任何包含名字中可重用的方法。 –

+0

改變它並沒有什麼區別......正如我在下面指出的那樣,我使用UITableView開始了這個項目,但是水平滾動成爲UITableView的問題,因爲它設計爲向上/向下滾動,所有人都推薦使用UIScrollView。 – LeviXC

回答

0

我想通了。

對於初學者,我從來沒有發起的結果的NSMutableArray在viewDidLoad方法

self.results = [[NSMutableArray alloc] init]; 

開始有一次,我改變了這一切,我所要做的就是更新我的渦旋式壓縮機方法

// Scroll index management 
- (void)scrollViewDidScroll:(UIScrollView *)sender { 
    float indexNum = self.scrollView.contentOffset.x/self.scrollView.frame.size.width; 
    float currentPosition = self.scrollView.contentOffset.x; 

    if(floor(indexNum) == indexNum) { 
     int num = (int)indexNum; 
     // if we are at the end, load more 
     if(num == ([self.results count]-1)) { 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       [self addScrollViewImages]; 
       [self.scrollView setContentOffset:CGPointMake(currentPosition, 0.0)]; 
      }); 
     } 
    } 
} 
0

你正在通過不使用UITableView而自殺。只需用原型UITableViewCells製作UITableView即可。繼承一個單元格imageViewTableCell,並將其唯一屬性填充爲UIImageView

其餘的只是使用UITableViewDelegateUITableViewDataSource

Tutorial for setting up a tableview

+0

這就是我從這個項目開始的地方,然而水平滾動成爲UITableView的問題,因爲它設計爲向上/向下滾動,所有人都推薦使用UIScrollView。 – LeviXC

+0

好的,我很抱歉。我誤解了你的問題。 – Zolnoor