2010-12-28 11 views
2

Ich arbeite an einer iPad App, mit der der Benutzer durch eine Reihe von Bildern scrollen kann (in der Regel etwa 20 JPG-Dateien in einer einzigen horizontalen Bildlaufansicht). Die Dateigrößen liegen jeweils bei etwa 200 kb. Die Bilder werden als die "Hintergrund" -Eigenschaft eines UIButton festgelegt, weil ich dem Benutzer erlauben wollte, auf die Schaltfläche zu klicken, um das Bild zu speichern. Jedes Mal, wenn ich die App starte, stürzt es nach dem Scrollen für eine Weile ab. Wenn Sie nicht blättern, verhält es sich normal. Ich habe die App mit den Performance-Tools ausgeführt und keine Lecks gefunden.iPhone Memory Warning Probleme mit UIScrollView

Ich bekomme eine "Level = 1" Speicherwarnung, kurz bevor die App abstürzt. Ich hatte es mit ungefähr 8 Bildern in der Scrollview laufen und hatte nie ein Problem. Ich weiß also, dass es etwas mit dem scrollView und den Bildern/Buttons zu tun hat. In der „viewDidLoad“ Methode, ich habe einfach den im Anschluss an die Scroll einzurichten und verknüpfen es dann im Interface Builder:

[scrollView setContentSize:CGSizeMake(5722, 340)]; 
[scrollView setScrollEnabled:YES]; 
[scrollView setDelaysContentTouches:YES]; 

Alle Ideen, wie diese Arbeit zu bekommen? Ich habe die Bilder direkt zur Schaltfläche im Interface Builder hinzugefügt. Wäre es hilfreich, wenn ich das Hintergrundbild lösche und stattdessen die Hintergründe in der Methode "viewDidLoad" einstelle? Jede Hilfe wäre willkommen.

Antwort

1

Klingt wie das, was Sie tun müssen, um einzelne Zellen zu erstellen, auf denen diese Bilder leben, die wie in einer Tabellenansicht recycelt werden. Ich habe einen Code, der das für Ihren Zweck verwendet, oder zumindest versuchen Sie es trotzdem. Funktioniert wie eine Tabellenansicht.

Es ist verfügbar here. Das macht das schwere Heben bereits für Sie, in dem alles, was Sie tun müssen, ist, eines von diesen zu schaffen, es in einer Ansicht irgendwo zu schlagen, und Ihre individuellen Zellen zu schaffen. Diese Zellen werden beim Scrollen wiederverwendet, so dass Sie nicht mehr als N + 2 Zellen gleichzeitig in den Speicher laden müssen, wobei N die Zahl ist, die auf Ihren Bildschirm passt.

+0

Danke Jer. Ich habe mir deinen Code angeschaut, aber ehrlich gesagt, ich habe keine Ahnung, wo ich anfangen soll. Dies ist meine erste iPad/iPhone App (obwohl ich seit einiger Zeit als Nebenprojekt daran arbeite), also lerne ich das gerade, während ich gehe. Kopiere und übertrage ich den Code in meine .h und .m Dateien oder erstelle ich neue Dateien mit deinem Code? Ich habe nichts mit Tischen gemacht, das ist alles neues, was ich lernen kann. Danke für Ihre Hilfe. – Brian

+0

Ok, zuerst sollten Sie sich mit Tabellenansichten vertraut machen. Sie werden überall verwendet, und Sie werden sie in anderen Bereichen oft verwenden. Die große Sache bei der Wiederverwendung von Zellen, die Sie verstehen müssen, ist, dass Sie Ihre Zelle löschen müssen, nachdem sie wiederverwendet wurde, oder wenn Sie nicht wiederverwendet werden können, vergeben Sie eine neue. Wenn Sie z. B. Bilder anzeigen, werden diese nur so lange im Speicher gespeichert, dass sie sofort benötigt werden: Die Bilder auf dem Bildschirm und eine Seite des scrollbaren Bereichs sind für Benutzer, die scrollen, "vorinstalliert". Der Rest ist nicht geladen, also verbrauchen Sie keinen Speicher. – jer

+0

Auch wird die WWDC-Sitzung 104 Ihnen helfen zu verstehen, wie die Wiederverwendung von Zellen implementiert wird. – jer

0

wie jer schrieb, scheint das Problem in der Wiederverwertung zu sein. Stelle sicher, dass du den Inhalt jeder Zelle jedes Mal entfernst, loslasst und aktualisierst, wenn du einen neuen in tableView bekommst: cellForRowAtIndexPath:

(Ich hätte jer's Beitrag kommentiert, aber ich kann das nicht, wahrscheinlich wegen meiner begrenzten Berechtigungen).

+0

Nur um zu bemerken, er verwendet keine Tabellenansicht. Er möchte horizontale Scrolling-Funktionen, und UITableView tut das nicht. – jer

Verwandte Themen