2012-12-23 4 views
8

Ich versuche, ein UIScrollView als Navigationsgerät in meiner iOS-Anwendung zu verwenden. Grundsätzlich möchte ich, dass die Anwendung basierend auf der Position eines Paging-fähigen UIScrollView spezifische Inhalte lädt. Es ist wie ein Navigationsrad.UIScrollView-Position ermitteln

Derzeit habe ich eine zweiseitige (2 * 320) Bildlaufansicht, und ich verwende die scrollViewDidEndDragging Delegate-Methode und contentoffset.x, um den entsprechenden Inhalt zu laden. Ich versuche, die Position des Scroll als solche zu bestimmen:

if (scrollView.contentOffset.x < 320) { 
    // Load content 1 
    } 
else if (scrollView.contentOffset.x >= 320) { 
    // Load content 2 
    } 

Mein Problem ist, dass ich entweder nicht verstehen, wie mit Content zu arbeiten oder es ist nicht geeignet bei meinem Problem zu befassen. So oder so, ich stecke fest. Kann mich jemand wissen lassen, wo ich falsch gelaufen bin, und/oder mir einen effizienteren Weg zeigen, um die Scrollview-Position zu bestimmen?

Ich bin dumm, ich habe vergessen zu erwähnen, was das Problem ist ... Grundsätzlich kann ich die Position der Scrollview nicht verfolgen. Wenn ich zur zweiten Seite gehe, registriert es nur Änderungen, wenn ich über das 620-Limit gehe (nach rechts springen). Aber wenn ich zurück zur Startposition gehe (Seite 1), registriert es die Änderungen. Mit anderen Worten, mein Tracking ist nicht korrekt.

Delegate und alles andere funktioniert gut, ich log sie!

Antwort

16

Es ist schwer zu sagen, weil Sie nie speziell erwähnt haben, was das Problem ist, aber ich werde ein paar Vermutungen daran nehmen.

Wenn die delegierte Methode ist nicht brauchen Sie angerufen werden zu erinnern, die Scroll-Ansichten Delegierten zu setzen:

[myScrollView setDelegate:self];

Andernfalls das Problem mit scrollViewDidEndDragging mit den Scroll-Ansichten zu erfassen, versetzt ist, dass Es überprüft den Offset an dem Punkt, an dem Sie mit dem Ziehen aufhören, was innerhalb der Zielseiten rect oder innerhalb der Startseiten rect sein könnte. Als Alternative würde ich vorschlagen, dass Sie scrollViewDidEndDecelerating verwenden, um den Inhaltsoffset zu überprüfen, wie er aufgerufen wird, sobald die Bildlaufansicht auf ihrer Zielseite zum Stillstand kommt.

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { 
    if (scrollView.contentOffset.x < 320) { 
     NSLog(@"%@",NSStringFromCGPoint(scrollView.contentOffset)); 
    } 
    else if (scrollView.contentOffset.x >= 320) { 
     NSLog(@"%@",NSStringFromCGPoint(scrollView.contentOffset)); 
    } 
} 
7

Ich denke, das könnte Ihnen helfen :). Mit scrollViewDidScroll erhalten Sie immer die genaue Position des Scroll:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    if (scrollView.contentOffset.x < 320) 
    { 
     // Load content 1 
    } 
    else if (scrollView.contentOffset.x >= 320) 
    { 
     // Load content 2 
    } 
} 

NSLog(@"Position: %g", scrollView.contentOffset.x);

Vergessen Sie nicht, die Delegaten UIScrollViewDelegate in Ihrer .h-Datei.

+0

Leider lösen tut, ist nicht mein Problem . Ich habe einige zusätzliche Informationen hinzugefügt, um das Problem zu klären. –

4

Hier ist eine Lösung für die aktuelle Position immer (Seite) als integer Wert: Verwendung scrollViewDidEndDecelerating: Methode:

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { 
    NSLog(@"%i", (int)(_scrollView.contentOffset.x/_scrollView.frame.size.width)); 
} 
0

UIScrollViewDelegate Verwendung,

func scrollViewWillBeginDragging(scrollView: UIScrollView){ 
     print("dragging begins") 
     print("Position: \(scrollView.contentOffset.x) , \(scrollView.contentOffset.y) ") 
    }