1

テキストをアニメーション化するココア コントロールを使用してアプリを作成しています。

https://www.cocoacontrols.com/controls/marqueelabel

と を使用CoreTextQuartzCoreます。

それはかなり素晴らしいコントロールですが、私は問題を抱えています。コントロールを使用して作成したアニメーション ラベルをインスタンス化するとすぐにスクロールが開始されますが、それを使用してアニメーション ラベルを作成するとアニメーション化されNSTimerないことがわかりました。私は使っている

- (void)viewDidLoad
{

    [super viewDidLoad];

    ....
    [self.view addSubview:continuousLabel1];
    [NSTimer scheduledTimerWithTimeInterval:5
                                                target:self
                                              selector:@selector(updatePrice)
                                              userInfo:nil repeats:YES];


}

アニメーション化されたラベルを作成するメソッドを呼び出すには、メソッドを直接呼び出すと、ラベルが作成およびアニメーション化されますが、上記のスケジュールされたタイマーを使用して呼び出されると、作成された新しいラベルは、タイマーではなく、最初の呼び出しでのみアニメーション化され、メソッドへの呼び出しが繰り返されます. メソッドがメインスレッド/メインランループで呼び出されていることを確認しましたが、アイデアはありますか?

わかりやすくするために、ワークフローは次のとおりです。

タイマー呼び出しメソッド --> ラベル 1 が作成され、アニメーションが開始されます。

5秒遅れ...

タイマーが再度メソッドを呼び出します --> ラベル 2 が作成されますが、期待どおりにアニメーションが開始されません。

編集:

- (void)updatePrice
{


        MarqueeLabel *continuousLabel2 = [[MarqueeLabel alloc] initWithFrame:CGRectMake(10, 230, self.view.frame.size.width-20, 20) rate:100.0f andFadeLength:10.0f];
        continuousLabel2.tag = 101;
        continuousLabel2.marqueeType = MLContinuous;
        continuousLabel2.animationCurve = UIViewAnimationOptionCurveLinear;
        continuousLabel2.continuousMarqueeExtraBuffer = 50.0f;
        continuousLabel2.numberOfLines = 1;
        continuousLabel2.opaque = NO;
        continuousLabel2.enabled = YES;
        continuousLabel2.shadowOffset = CGSizeMake(0.0, -1.0);
        continuousLabel2.textAlignment = NSTextAlignmentLeft;
        continuousLabel2.textColor = [UIColor colorWithRed:0.234 green:0.234 blue:0.234 alpha:1.000];
        continuousLabel2.backgroundColor = [UIColor clearColor];
        continuousLabel2.font = [UIFont fontWithName:@"Helvetica-Bold" size:17.000];
        continuousLabel2.text = @"This is another long label that doesn't scroll continuously with a custom space between labels! You can also tap it to pause and unpause it!";

        [self.view addSubview:continuousLabel2];

    if( [NSThread isMainThread])
    {
        NSLog(@"In Main Thread");
    }
    if ([NSRunLoop currentRunLoop] == [NSRunLoop mainRunLoop]) {
        NSLog(@"In Main Loop");
    }


}
4

2 に答える 2

2

updatePrice問題は、 5 秒ごとに呼び出しており、このメソッドで新しいラベルを作成していて、それが積み重なっていて、5 秒ごとにどんどん暗くなっていくことに気付くことです。

そして、ラベルがスクロールしていることを確認すると。

解決:

ラベルの複数のインスタンスが必要な場合は、その座標を変更します。

単一のインスタンスが必要な場合は、チェックを比較して一度だけ作成します。

于 2013-06-02T07:19:06.820 に答える
1

README ファイルの重要なアニメーションに関する注意事項のセクションを読む必要があります。

controllerLabelsShouldAnimate:ビュー コントローラーが既に表示された後に追加されたラベルをアニメーション化するには、現在のビュー コントローラーを渡すことを呼び出す必要があると思います。

于 2013-06-02T20:10:54.143 に答える