73

現在、カスタムViewControllerコンテナーを使用するアプリケーションを作成しています。一度に複数のビューが画面に表示され、そのうちの1つをタップすると、選択したビューコントローラが全画面にアニメーション化されます。そうすることで、選択したビューコントローラのサブビューも拡大縮小します(フレーム、フォントサイズなど)。ただし、UILabelのフォントプロパティはアニメートできないため、問題が発生します。私は複数の解決策を試しましたが、すべてがうまくいきません。

私が試した解決策は次のとおりです。

  1. 拡大表示のスクリーンショットを撮り、変更をアニメーション化します(Flipboardの場合と同様)
  2. 変換プロパティを使用してアニメーション化する
  3. UIScrollViewをズームアウトし、フルスクリーンにしたときにズームインします。
  4. 設定は、AdjustsFontSizeToFitWidthをYESに設定し、アニメーションの前にfontSizeを設定します

これまでのところ、1つが最善の解決策でしたが、私はそれに満足していません。

[UIView animate ..]を使用してスムーズにアニメーション化するUILabelの代替品がある場合は、他の提案を探しています。

これは、UILabelに実行させたいことと似た良い例です。http: //www.cocoawithlove.com/2010/09/zoomingviewcontroller-to-animate-uiview.html

編集:このコードは機能します

// 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];

}];
4

9 に答える 9

65

アニメーションのサイズとフォントを次のUILabelように変更できます..ここではUILabel、変換アニメーションのフォントを変更する方法の例を示します..

    yourLabel.font = [UIFont boldSystemFontOfSize:35]; // set font size which you want instead of 35
    yourLabel.transform = CGAffineTransformScale(yourLabel.transform, 0.35, 0.35); 
    [UIView animateWithDuration:1.0 animations:^{
        yourLabel.transform = CGAffineTransformScale(yourLabel.transform, 5, 5);
    }];
于 2013-01-24T05:32:28.860 に答える
27

UILabelSwift で拡張機能を作成しました。

import UIKit

extension UILabel {
    func animate(font: UIFont, duration: TimeInterval) {
        // let oldFrame = frame
        let labelScale = self.font.pointSize / font.pointSize
        self.font = font
        let oldTransform = transform
        transform = transform.scaledBy(x: labelScale, y: labelScale)
        // let newOrigin = frame.origin
        // frame.origin = oldFrame.origin // only for left aligned text
        // frame.origin = CGPoint(x: oldFrame.origin.x + oldFrame.width - frame.width, y: oldFrame.origin.y) // only for right aligned text
        setNeedsUpdateConstraints()
        UIView.animate(withDuration: duration) {
            //L self.frame.origin = newOrigin
            self.transform = oldTransform
            self.layoutIfNeeded()
        }
    }
}

ラベル テキストが左揃えまたは右揃えの場合は、行のコメントを外します。

于 2016-09-09T15:35:07.897 に答える