所以我通過放置調整大小的圖像來做我的第一個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];
});
}
}
}
我覺得代碼是正確的。試着在添加ImageView之前嘗試調整幀寬度,即將此代碼稍微移動一下if(self.x> self.view.frame.size.width)self.scrollView.contentSize = CGSizeMake(self.x,self.scrollView '''' –
我認爲你應該認真考慮使用'UITableView'。你可以在單獨的'UITableViewCell'中顯示每個圖像(可能是你自己設計的一個自定義的'UITableViewCell'子類)。爲什麼?因爲UITableView已被設計爲通過其「可重用單元」功能輕鬆顯示無限(或至少非常大)的對象列表。它會爲你節省大量的工作。如果您對UITableView不熟悉,請查看關於此類(及其數據源和委託)的Apple文檔以獲取詳細信息。特別注意任何包含名字中可重用的方法。 –
改變它並沒有什麼區別......正如我在下面指出的那樣,我使用UITableView開始了這個項目,但是水平滾動成爲UITableView的問題,因爲它設計爲向上/向下滾動,所有人都推薦使用UIScrollView。 – LeviXC