Probleme mit zoomToRect in UIWebView

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Probleme mit zoomToRect in UIWebView

    Hallo!
    Ich benötige noch mal eure fachmännische Hilfe. Und zwar habe ich eine App mit Navigation Bar.
    Nun binde ich in einem View mittels UIWebView eine Straßenkarte ein:

    Quellcode

    1. //streetMapController.m
    2. //In viewDidLoad
    3. NSURL *url = [[NSBundle mainBundle] URLForResource:@"Streetmap" withExtension:@"pdf"];
    4. NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
    5. [myWebView setOpaque:NO];
    6. [myWebView setBackgroundColor:[UIColor clearColor]];
    7. [myWebView loadRequest:requestObj];


    Jetzt kann man über die NavigationBar (UIBarButtonItem) sich auf ein neues View navigieren, wo man explizit Straßennamen suchen kann.
    Mein Ziel ist es, bei Klick auf einen Straßennamen das vorherige View mit der Karte zu öffnen und die gesuchte Straße ran zu zoomen. Das kann ich mit der Methode UIScrollView-Methode zoomToRect bewerkstelligen. Das klappt aber leider nicht bzw. nicht richtig.


    Quellcode

    1. //streetMapController.m
    2. - (void)viewWillAppear:(BOOL)animated
    3. {
    4. //Übergabe der Koordinaten prüfen
    5. if(showYCoord != 0 && showXCoord != 0)
    6. {
    7. UIScrollView *sv = [[myWebView subviews] objectAtIndex:0];
    8. [sv zoomToRect:CGRectMake(showXCoord,showYCoord, 40.0, 40.0) animated:YES];
    9. }
    10. }

    Die x- und y-Koordinaten (showXCoord, showYCoord) werden sauber übergeben als Integer. Also wenn ich auf einen Straßennamen klicke, werden die Koordinaten an den streetMapController übergeben und idealerweise wird dahin gezoomt, tut es aber nicht. Wenn ich allerdings auf den Back-Button in der NavigationBar klicke (was mich ja dann wieder zu dem Straßenverzeichnis führt) und erneut den Straßennamen anklicke, dann erst wird gezoomt wie es soll. Kurzum: Nur ein Klick auf den Back-Button aktiviert diese Zoom-Funktion. Irgendwann bei meiner endlosen Recherche habe ich mal gelesen, dass es ein Bug im Scrollview sein soll, allerdings schon im iOS 3. Sollte doch mittlerweile behoben sein, oder?
    Wenn dir das Leben Scheixxe schenkt, mach 'nen Schokokuchen draus.
  • _Coco_ schrieb:

    Quellcode

    1. //streetMapController.m
    2. - (void)viewWillAppear:(BOOL)animated
    3. {
    4. //Übergabe der Koordinaten prüfen
    5. if(showYCoord != 0 && showXCoord != 0)
    6. {
    7. UIScrollView *sv = [[myWebView subviews] objectAtIndex:0];
    8. [sv zoomToRect:CGRectMake(showXCoord,showYCoord, 40.0, 40.0) animated:YES];
    9. }
    10. }

    Seit iOS 5 kannst Du auch auf legalem Weg auf den Scrollview zugreifen.
    „Meine Komplikation hatte eine Komplikation.“
  • macmoonshine schrieb:

    _Coco_ schrieb:

    Ich versuch jetzt mal das WebView in ein Scrollview zu packen und dieses zu zoomen, anstatt das ScrollView im WEbView.

    Da rät die Doku aber dringend von ab.

    Kannst Du den Inhalt der Webseite anpassen?
    Hat eh nicht funktioniert.
    Was meinst du mit "Inhalt an Webseite anpassen"? Der einzige Inhalt des WebView ist das PDF. Da steckt kein HTML hinter.
    Wenn dir das Leben Scheixxe schenkt, mach 'nen Schokokuchen draus.
  • Yedy schrieb:

    Versuch doch mal testweise den Zoom in eine eigene Methode zu legen und diese dann in DidFinishedLoad mit großzügigem Delay (performSelector:withObject:afterDelay) aufzurufen.
    Boah ne, gibt's nicht!!! Das klappt! Was ist passiert?

    HIER der Code:

    Quellcode

    1. -(void)webViewDidFinishLoad:(UIWebView *)webView
    2. {
    3. [self performSelector:@selector(zoomIn) withObject:NULL afterDelay:1.0];
    4. }
    5. -(void) zoomIn
    6. {
    7. if(showYCoord != 0 && showXCoord != 0)
    8. {
    9. [myWebView.scrollView zoomToRect:CGRectMake(showXCoord,showYCoord, 40.0, 40.0) animated:YES];
    10. }
    11. }
    Alles anzeigen
    Wenn dir das Leben Scheixxe schenkt, mach 'nen Schokokuchen draus.
  • Yedy schrieb:

    Wie schon gesagt, muss die WebView erst fertig rendern bevor der Zoom funktioniert. Deine Karte braucht wohl eine Weile. Die Delegates reagieren auf fertigladen des Frames, das Rendering ist dann noch nicht unbedingt durch.
    Ah ok. Also würde ein einfacher Methoden-Aufruf auch nichts bringen. Vielen Dank! Du hast meinen Tag gerettet!
    Wenn dir das Leben Scheixxe schenkt, mach 'nen Schokokuchen draus.