4

次のように、内部に UILabel を持つコンテナーとして UIView があります。

-------------       ---------
|           |       |       |
|Label text |       |Label..|
|           |  -->  |       |
|           |       |       |
|           |       |       |
-------------       ---------

今私が使用するとき:

UIView animateWithDuration:animations:

UIView(UILabelを含む)の幅を小さく設定しようとすると、アニメーション中にUILabelがスムーズに移行せずに突然「...」に置き換えられます。UILabel autoresizingmask を UIViewAutoresizingFlexibleWidth、UIViewAutoresizingFlexibleRightMargin に設定して、左に保持し、contentmode を左に設定します。

Scale to fill、Aspect fit、Aspect fill などの他のコンテンツモードを試しても、テキストが拡大縮小されて奇妙に見えるため、私の問題は解決しません。

UILabel のスムーズな移行方法を知っている人はいますか?

4

4 に答える 4

5

少し前に説明した方法でラベルをアニメーション化しましたが、ある程度の余裕を持たせる必要があります。基本的な考え方: - clipsToBounds:YES を使用して、コンテナ ビューにラベルを追加します。- ラベル フレームをアニメーション化するのではなく、コンテナ ビューのフレームをアニメーション化して、ラベルがスムーズに遷移するようにします。- 省略記号 (...) に別のラベルを使用して、この部分もアニメーション化できるようにします。

于 2012-09-07T06:51:04.407 に答える
0

古い質問ですが、これは私を助けました:

    override var frame: CGRect {
        didSet {
            self.layoutSubviews()
        }
    }
于 2015-11-27T19:19:02.377 に答える
0

残念ながら、ラベルはスケーリングしません。フレームを変更すると、テキストが配置される場所が変更されますが、テキストのサイズはこのようにスケーリングされません。したがって、基本的なアニメーションは終了しました。代わりに、タイマーが起動するたびに、ラベルのフレームを所定の量だけ縮小するタイマーを起動することもできます。

もちろん、labelssetAdjustsFontSizeToFitWidthプロパティをに設定する必要がありますYES

注:可能であれば、5/1000 秒ごとにタイマーを実際に起動することは避けてください。

- (void)fireTimer
{
    timer = [NSTimer scheduledTimerWithTimeInterval:0.005 target:self selector:@selector(animate) userInfo:nil repeats:YES];
}

- (void)animate
{
    [label setAdjustsFontSizeToFitWidth:YES];
    if (label.frame.size.width > 100) {
        [label setFrame:CGRectMake(label.frame.origin.x, label.frame.origin.y, label.frame.size.width-1, label.frame.size.height)];
    }else{
        [timer invalidate];
        timer = nil;
    }
}
于 2012-09-07T06:58:06.733 に答える