UIWebView scrollTo sollte sich reibungslos verhalten

9

Ich weiß nicht, ob ich im Fragetitel richtig gefragt habe, aber hier werde ich kurz beschreiben

Ich habe ein UIWebView und lade den Inhalt basierend auf div und jedes div hat eine eindeutige ID auf loadRequest. Als ob mein Inhalt zu groß wäre, zerlege ich in Stücke und lade den restlichen Inhalt, sobald du auf "Mehr lesen" klickst

Dieses 'Read More' Ereignis Feuer auf Autoscroll, die ich mit Javascript handle. Sobald dieses Ereignis ausgelöst wird, fügt es einfach Daten an (für die ich eine andere Methode verwende), indem ich window.location.href = div1 + div2 (es ist nur ein Beispiel) verwenden.

Jetzt ist das Hauptproblem, wenn ich scrollDown und whierver ich bekomme die "Lesen Sie mehr" Nachricht und es automatisch feuern dann fügt es die Daten zum aktuellen div und zeigen (Benutzer fühlen es ein weiterlesen) aber wenn

Ich scrolle in Richtung nach oben Es verhält sich veraltet, weil es einfach die Daten an das div anfügt und zu setYScroll (updatedlocation) blättert;

updatedlocation wird verwendet, wenn wir den Inhalt zum div hinzufügen und zu derselben Position blättern sollten, an der sich der Benutzer befand.

Also beginnen wir mit einem Beispiel, nehme an, dass ich gerade das div2 lese und wenn ich nach oben 'Read More' Ereignisse feuert und div1 zu div2 hinzufüge und dann web view delegate sustainStartLoadWithRequest aufgerufen.

Also jedes Mal wenn ich den Inhalt nach div2 aktualisiere, wenn du hoch scrollst, aber zuerst nehme ich die vorherige Position von div1 und dann bringe ich zum div2 Ort, wo ich gerade lese. so fühlt es sich an wie wirklich gewirtschaftet, plötzlich bringt es mich irgendwohin für eine zeit und bringt mich zu meiner momentanen position innerhalb der reibung von second

Ich habe versucht mit dieser Lösung, Ich dachte mir, den Screenshot zu machen und ein ImageView mit dem Screenshot des aktuellen UIWebView zu erstellen und ein Webview zu erstellen, wann immer 'Read More' stattfindet. Sobald die Webansicht geladen ist, entfernen Sie die imageView und zeigen Sie die Webansicht an. aber dies geschieht auf die gleiche Weise, das Problem ist, dass alles unter dem Webview-Delegaten passiert. Ich konnte immer noch nicht herausfinden, was passiert ist? Die Lösung dieses Problems bin ich auf der richtigen Spur oder gibt es dafür eine bessere Lösung.

    
Praveen-K 09.08.2011, 18:17
quelle

3 Antworten

1

Ich habe eine ähnliche Situation. Was ich mache, sind zwei UIWebViews übereinander. Wenn es Zeit ist, eine Ansicht zu aktualisieren, ergreife ich die Bildlaufposition, lade die neuen Daten in das versteckte UIWebView, wenn das andere UIWebView seine Daten geladen hat, setzt es seine Bildlaufposition auf die aktuelle Bildlaufposition der ersten Webansicht und blendet sie dann aus der erste Webview und zeigt sich selbst. Es ist ziemlich nahtlos und funktioniert sehr gut.

    
itgiawa 26.02.2012 00:47
quelle
0

Ich vermute, dass der "Sprung", den Sie erleben, davon abhängt, dass die Webansicht vollständig neu gezeichnet wurde (und wir wissen alle, dass UIWebView langsam ist).

Also, ich sehe 2 Optionen:

  1. implementieren Sie die "Lesen Sie mehr" -Mechanik vollständig in Javascript mit Hilfe von Ajax;

  2. Anstatt Daten mit loadRequest in die Ansicht zu laden, erstellen Sie NSConnection für diese URL und aktualisieren dann die Webansicht, indem Sie den von NSConnection bis stringByEvaluatingJavaScriptFromString / p>

Die zweite Option ist möglicherweise netter, weil sie vollständig SDK-basiert ist, aber Sie werden sehen, dass sie viel komplexer ist als die erste. Die beiden werden arbeiten, und ich bin mir ziemlich sicher, dass das dir das glatte Verhalten geben wird, das du anstrebst.

    
sergio 10.08.2011 19:29
quelle
0

Wenn ich Ihre Frage richtig verstehe, klingt es so, als wollten Sie Ihre eigene Handhabung des "unendlichen Scroll" -Konzepts implementieren.

Es könnte sich lohnen, eine der zahlreichen unendlichen Scroll-Bibliotheken zu besuchen, die bereits auf dem Markt sind. Wenn Sie Ihre Anforderungen nicht perfekt erfüllen, finden Sie möglicherweise die Inspiration, die Sie benötigen, um die, die Sie jetzt haben, zu beheben.

    
Jeff 29.09.2011 22:45
quelle