OK、私はObjective Cにかなり慣れていません。ウェブサーバーから画像のリストをダウンロードし、UIImageビューに適切な画像を表示して、次/前の写真を前後にスワイプして表示するアプリがあります。表示されます。写真の現在の命名形式は次のとおりです。
uploaded_141_admin1.png
uploaded_141_admin2.png
uploaded_141_interior1.png
uploaded_141_interior2.png
uploaded_141_exterior1.png
現在のコードは、ファイル名の中央部分に141があるビューにすべての画像をロードします(または、ユーザーが記録しているレコードはすべて... 141はこの場合は可変であり、フォーマットの例としてここに示されています)。問題は、それらがどのような順序で表示されるかについて、韻や理由がないように思われることです。ファイル名の最後の部分を使用してアルファベット順に並べ替えます(または、同じ結果が得られるため、ファイル名全体を使用することもできます)。 )。上記の例では、uiimageiewをスワイプすると、ダウンロードした写真が次の順序で表示されます。
uploaded_141_admin1.png
uploaded_141_admin2.png
uploaded_141_exterior1.png
uploaded_141_interior1.png
uploaded_141_interior2.png
検索しましたが、探しているものが見つかりません(間違った検索条件を使用している可能性があります)。これは、UIImageViewに画像をダウンロードして表示する既存のコードです。「ソート」コードはここのどこかにあると思います。
-(void)downloadPictures:(NSArray *)picPaths {
ELog(@"Downloading pictures: %@",picPaths);
// wait indicator
[[WaitingView sharedInstance] setMessage:LocStr(@"Loading pictures... The more pictures there are, the longer this will take. Please be patient.")];
[[WaitingView sharedInstance] showIndicator:YES];
[[WaitingView sharedInstance] displayOn:[self view]];
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
// queue download operation
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
NSInvocationOperation *downloadOp = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(downloadOperation:) object:picPaths];
[queue addOperation:downloadOp];
}
-(void)downloadOperation:(NSArray *)picPaths {
NSMutableArray *allPictures = [[NSMutableArray alloc] init];
for(NSString *path in picPaths) {
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://%@%@/%@/%@",SERVER_ADDRESS,SERVER_PORT,SERVER_PHOTOS,path]];
NSData *picData = [NSData dataWithContentsOfURL:url];
if(picData!=nil) {
UIImage *img = [UIImage imageWithData:picData];
if(img!=nil) {
[allPictures addObject:img];
} else {
ELog(@"Failed to convert data to image from url %@",url);
}
} else {
ELog(@"Failed to download image from url %@",url);
}
}
[[WaitingView sharedInstance] performSelectorOnMainThread:@selector(remove) withObject:nil waitUntilDone:NO];
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
self.pictures=allPictures;
if([self.pictures count]==0) {
[self performSelectorOnMainThread:@selector(downloadErrorMessage) withObject:nil waitUntilDone:NO];
} else {
self.currentIndex=0;
[self performSelectorOnMainThread:@selector(showPicture) withObject:nil waitUntilDone:NO];
}
}
-(void)downloadErrorMessage {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Oooops!" message:LocStr(@"Pictures download failed") delegate:nil cancelButtonTitle:LocStr(@"Close") otherButtonTitles:nil];
[alert show];
[alert release];
[self goBack];
}
-(void)showPicture {
UIImage *image = [self.pictures objectAtIndex:self.currentIndex];
ELog(@"Now displaying image with index %d: %@",self.currentIndex,image);
self.picture.image=image;
[self.picture setNeedsLayout];
}