Frage

Ich habe eine UILabel, die das aktuelle Datum für die aktuelle Ansicht meiner Scroll-Ansicht zeigt. Als ich diese Ansicht nach links bewegen (nach links Seiten), würde ich dieses Label wie vor an den Tag zu ändern, mit einem Kreuzungseffekt zwischen den zwei Terminen.

ich als Referenz nehmen Sie die Fading-Effekt des Springboard, wenn Sie auf der Spotlight-Seite blättern. Ich denke, das ist ähnlich, aber ich habe keine Ahnung, wie es zu implementieren!

Wo finde ich den Code zu setzen, habe ich 2 verschiedene UILabel nutzen oder vielleicht Coreanimation? Wenn ich das Datum ändern?

Vielen Dank im Voraus!

War es hilfreich?

Lösung

  1. In Ihrem scrollViewDidScroll: Delegatmethode prüfen, ob die contentOffset zeigt die Scroll-Ansicht, dass der Benutzer auf eine andere Seite gescrollt hat.
  2. Wenn ja, um den Text zu dem neuen Datum des Labels zu ändern. Es wird noch nicht, animiert, aber dies tun, bevor Sie die Animation versuchen.
  3. Für die Animation, eine CATransition auf die Schicht des Labels hinzufügen und konfigurieren Sie es nach Ihren Wünschen:

    // Create a transition animation and add it to the label's layer:
    CATransition *transition = [CATransition animation];
    transition.type = kCATransitionFade;
    transition.duration = 0.25;
    [self.dateLabel.layer addAnimation:transition forKey:@"textTransition"];
    // Change the label's text as before:
    self.dateLabel.text = newDateString;
    

Dieser Effekt ist ein wenig anders als das Verblassen des Springboard Icons (da diese kontinuierlich verblassen, wie Sie auf die Spotlight-Seite scrollen), aber ich denke, dass mein Ansatz besser geeignet für Ihre Anwendung ist. Um den Effekt Spring emulieren, sollten Sie in der Tat zwei separate Etiketten verwenden (mit dem gleichen Rahmen) und deren Trübungswerte ändern, wenn die Content Änderungen der Ansicht blättern.

Andere Tipps

Mit Core Animation mit zwei Etiketten würde gut funktionieren. Ändern der Eigenschaft eines Ergebnisses Core Animation Schicht in einem glatten Übergang standardmäßig so dass Sie zu Ihrem Vorteil nutzen können. Zum Beispiel:

- (void)crossfadeDateLabels
{
    date1Label.layer.opacity = 0.0f;
    date2Label.layer.opacity = 1.0f;
}

Sie können auch das explizite Animationsmodell verwenden, wenn Sie mehr Kontrolle:

- (void)crossfadeDateLabels
{
    CABasicAnimation *date1Anim = [CABasicAnimation animationWithKeyPath:@"opacity"];
    date1Anim.duration = 1.0f;
    date1Anim.fromValue = [NSNumber numberWithFloat:1.0f];
    date1Anim.toValue = [NSNumber numberWithFloat:0.0f]

    // Do something similar for date2Anim...

    [date1Label.layer addAnimation:date1Anim forKey:nil];
    [date2Label.layer addAnimation:date2Anim forkey:nil];
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top