テキストをアニメーション化するココア コントロールを使用してアプリを作成しています。
https://www.cocoacontrols.com/controls/marqueelabel
と を使用CoreText
しQuartzCore
ます。
それはかなり素晴らしいコントロールですが、私は問題を抱えています。コントロールを使用して作成したアニメーション ラベルをインスタンス化するとすぐにスクロールが開始されますが、それを使用してアニメーション ラベルを作成するとアニメーション化され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");
}
}