2011-01-04 12 views
2

Ich habe einen Punkt, der sich um den Bildschirm bewegt. Wenn die Grenze der Bildlaufansicht überschritten wird, wird eine neue Kachel erstellt, auf die der Punkt verschoben werden kann, und die Größe der Bildlaufansicht wird erhöht. Ich verfolge das mit:UIScrollView mit Kacheln mit negativem Ursprung

scrollViewBounds = CGRectUnion(newTileBounds, scrollViewBounds); 
[scrollView setContentSize:scrollViewBounds.size]; 

Das funktioniert gut, solange die neuen Fliesen einen nicht-negativen Ursprung haben. Wenn sich die neu erstellten Kacheln am linken Rand befinden und einen negativen Ursprung haben, wird die Begrenzungsgröße auf der rechten Seite kompensiert. Ich weiß, dass setContentSize nur sagt, wie groß die Ansicht sein wird, nicht wo sie sich befindet.

Also habe ich versucht mit setContentOffset und das schien häckselig zu arbeiten, aber dann, wenn ich scrollte, würde es zurück in den positiven Bereich springen und Sie konnten nicht mehr zum negativen Bereich scrollen.

Wie werden die Kacheln mit negativem Ursprung sichtbar?

Antwort

0

Sie könnten in der Mitte der Inhaltsansicht beginnen und contentSize auf die maximal mögliche Größe einstellen. Auf diese Weise müssen Sie die Inhaltsgröße nicht dynamisch anpassen.

+0

Nun, das Problem ist, dass ich nicht weiß, was die maximale Größe ist. Der Punkt kann beliebig weit in jede Richtung bewegt werden. – Ben

0

Technisch liegen negative Ursprünge außerhalb des Bildlaufbereichs. Wenn sich Ihr Objekt außerhalb dieses Bereichs bewegt, müssen Sie den Bereich vollständig neu erstellen, den Versatz so einstellen, dass er so aussieht, als hätten Sie ihn nicht neu erstellt, und dann den Inhalt in die Ansicht verschieben. Oder neu zu positionieren, sowohl den Inhalt und den Punkt, so dass es so aussieht, werden sie in dieser Richtung werden Scrollen (wenn das Sinn macht) ...

Abstractly, das ist, wie Sie den Inhalt positionieren würde:

if(object.origin.x < 0) { 
contentArea.origin.x = -contentArea.bounds.width; 
object.origin.x = contentArea.bounds.width + object.origin.x; 
} 

Hoffentlich hilft das!

Verwandte Themen