Jestem początkującym programistom iOS i mam ograniczoną wiedzę na temat iOS i Objective-C, więc proszę o pomoc.iOS Jak odświeżyć ScrollView po zmianie modelu?
Pracuję nad aplikacją flickr photo, która zasadniczo wymaga danych zdjęciowych z interfejsu API flickr i przedstawia go w scrollView.
Ale napotkam pewien problem w mojej wersji na iPada, przedstawiony z UISplitViewController. Pozwól mi podać proste wprowadzenie do mojej aplikacji.
MASTER Widok: lista UITableViewController osadzone w UINavigationViewController, w zasadzie to po prostu korzystać z niektórych Flickr API, aby uzyskać pewne dane, występuje coś takiego:
navigationController ->
tableViewControllerA (Zdjęcia organizowane przez kraje) ->
tableViewControllerB (lista zdjęć w tym kraju) Po wybraniu zdjęcia w TableViewControllerB, w moim kodzie przekazuję URL zdjęcia (z Flickr API) do mojego kontrolera widoku szczegółów, który jest scrollView, a tutaj jest mój kod w scrol lView's ViewController.
IBOutlet UIScrollView *scrollView;
IBOutlet UIImageView *imageView;
NSURL *photoURL;
- (void) viewDidLoad
{
[super viewDidLoad];
dispatch_queue_t downloadQueue = dispatch_queue_create("flickr donwloader", NULL);
dispatch_async(downloadQueue, ^{
// load image
self.imageView.image = [UIImage imageWithData: [NSData dataWithContentsOfURL:self.photoURL]];
dispatch_async(dispatch_get_main_queue(), ^{
// configure scrollView and imageView
CGSize photoSize = self.imageView.image.size;
self.scrollView.delegate = self;
[self.scrollView setZoomScale:1.00];
[self.scrollView setMinimumZoomScale:0.5];
[self.scrollView setMaximumZoomScale:1.00];
self.scrollView.contentSize = photoSize;
self.imageView.frame = CGRectMake(0, 0, photoSize.width, photoSize.height);
CGPoint scrollCenter = self.scrollView.center;
self.imageView.center = scrollCenter;
});
});
dispatch_release(downloadQueue);
iw świetle nadrzędnego, gdy obraz jest wybrana, ustawić detailView (Scrollview) to właściwość photoURL, więc zastąpić metodę setter photoURL
-(void) setPhotoURL:(NSURL *)photoURL
{
// do something to refresh my scrollView, below are something I already tried
self.imageView.image = [UIImage imageWithData: [NSData dataWithContentsOfURL:self.photoURL]];
[self.scrollView setNeedsDisplay];
[self.view setNeedsDisplay];
[self.imageView setNeedsDisplay];
}
moim celem jest tylko kiedy mój model (photoURL) daje, mój scrollView powinien dać mi odpowiedni imageView, ale kiedy uruchomiam aplikację i wybieram zdjęcie, scrollView nie "zaktualizował", już nauczyłem się aktualizować UITableView (self.tableView reloadData), ale Naprawdę nie wiem, jak to zrobić, proszę o pomoc!
PS:
1 Proszę wybaczyć mój słaby angielski -_- ja już próbowałem wyjaśnić jak najdalej.
2 nie mam wystarczająco dużo reputacji, aby zaktualizować obraz pozwolić ci faceci w pełni zrozumieć, co moja aplikacja jest, nadzieję, że można zrozumieć tylko przez to, co powiedziałem
UPDATE: używam zamiast mechanizmu KVO nadpisania metody ustawiającej photoURL, ale [self.scrollView setNeedsDisplay] nadal nie działa.
Używam debuggera do śledzenia postępu, KVO działa, ale nic się nie dzieje po [self.xxx setNeedsDisplay], jestem całkowicie zdezorientowany i nie wiem co robić.
Dzięki za twoją pomoc, nie nauczyłem się jeszcze KVO. Przejdę do przewodnika po dokumentacji Apple, a następnie przetestuję, czy działa. Dzięki ~ – ifournight
... i pamiętaj, aby usunąćObserver w dealloc .... – bandejapaisa
Em ... Mechanizm KVO działa OK, ale [self.scrollView setNeedsDisplay] nadal nie ma żadnego efektu ... – ifournight