Ich erstelle derzeit eine Anwendung, die einen benutzerdefinierten View Controller-Container verwendet. Es werden mehrere Ansichten gleichzeitig auf dem Bildschirm angezeigt. Wenn Sie auf eine tippen, wird der ausgewählte Ansichts-Controller im Vollbildmodus animiert. Dabei werden auch die Unteransichten der ausgewählten Ansichtssteuerungen skaliert (Rahmen, Schriftgröße usw.). Die Schrifteigenschaft von UILabel kann jedoch nicht animiert werden, was zu Problemen führt. Ich habe mehrere Lösungen ausprobiert, aber alle saugen.
Die Lösungen, die ich versucht habe, sind:
- Machen Sie einen Screenshot der größeren Ansicht und animieren Sie die Änderung (ähnlich wie bei Flipboard).
- Animieren Sie mithilfe der Transformationseigenschaft
- Verkleinern einer UIScrollView und Vergrößern, wenn sie auf Vollbild gebracht wird.
- Durch Einstellen von adjustsFontSizeToFitWidth auf YES und Festlegen der Schriftgröße vor der Animation
Eine war bisher die beste Lösung, aber ich bin damit nicht zufrieden.
Ich suche nach anderen Vorschlägen, wenn jemand einen oder einen UILabel-Ersatz hat, der mit [UIView animate ..] reibungslos animiert.
Hier ist ein gutes Beispiel, das dem ähnelt, was mein UILabel tun soll: http://www.cocoawithlove.com/2010/09/zoomingviewcontroller-to-animate-uiview.html
EDIT: Dieser Code funktioniert
// Load View
self.label = [[UILabel alloc] init];
self.label.text = @"TEXT";
self.label.font = [UIFont boldSystemFontOfSize:20.0];
self.label.backgroundColor = [UIColor clearColor];
[self.label sizeToFit];
[self.view addSubview:self.label];
// Animation
self.label.font = [UIFont boldSystemFontOfSize:80.0];
self.label.transform = CGAffineTransformScale(self.label.transform, .25, .25);
[self.label sizeToFit];
[UIView animateWithDuration:1.0 animations:^{
self.label.transform = CGAffineTransformScale(self.label.transform, 4.0, 4.0);
self.label.center = self.view.center;
} completion:^(BOOL finished) {
self.label.font = [UIFont boldSystemFontOfSize:80.0];
self.label.transform = CGAffineTransformScale(self.label.transform, 1.0, 1.0);
[self.label sizeToFit];
}];