8 Stimmen

iOS Wie aktualisiert man ScrollView, wenn sich das Modell ändert?

Ich bin neu in der iOS-Programmierung und habe nur begrenzte Kenntnisse über iOS und Objective-C, also bitte helfen Sie mir.

Ich arbeite an einer Flickr-Foto-App, die im Grunde benötigen Foto-Daten von Flickr-API und präsentieren eine in scrollView.

Aber ich treffe einige Problem in meinem iPad-Version, mit UISplitViewController präsentiert. Lassen Sie mich eine einfache Einführung in meine App geben.

MASTER VIEW: eine Liste von UITableViewController, die in UINavigationViewController eingebettet ist, im Grunde verwendet sie nur einige Flickr-API, um einige Daten zu erhalten, präsentieren etwas wie dieses:

navigationController - >

tableViewControllerA (Fotos nach Ländern geordnet) - >

tableViewControllerB (Fotoliste in diesem Land) Wenn ein Foto in TableViewControllerB ausgewählt wird, übergebe ich in meinem Code die Foto-URL (von der Flickr-API) an meinen Detail-View-Controller, bei dem es sich um einen scrollView handelt, und hier ist mein Code im ViewController von scrollView.

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);

und in der Master-Ansicht, wenn ein Bild ausgewählt ist, setze ich die Eigenschaft photoURL der detailView (scrollView), also überschreibe ich die Setter-Methode von 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];
}

mein Zweck ist nur, wenn mein Modell (photoURL) geben, meine scrollView sollte mir die entsprechende imageView, aber wenn meine app laufen und ich ein Foto auswählen, die scrollView did't "Update", ich habe bereits gelernt, wie man UITableView (self.tableView reloadData) zu aktualisieren, aber ich weiß wirklich nicht, wie dies zu tun, bitte helfen!

PS:

1 Bitte verzeihen Sie mein schlechtes Englisch -_- Ich habe bereits versucht, so klar wie möglich zu erklären.

2 Ich habe nicht genug Ruf, um das Bild zu aktualisieren, damit ihr versteht, was meine App ist. Ich hoffe, ihr versteht, was ich gesagt habe.


UPDATE: Ich verwende den KVO-Mechanismus, anstatt die Setter-Methode von photoURL zu überschreiben, aber [self.scrollView setNeedsDisplay] funktioniert immer noch nicht.

Ich verwende Debugger, um den Fortschritt zu verfolgen, die KVO funktioniert, aber nichts passieren nach [self.xxx setNeedsDisplay], ich bin völlig verwirrt und weiß nicht, was zu tun ist.

enter image description here

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X