NSTimer を使用して CATextLayer にテキストを書き込んでいますが、テキストは一瞬しか表示されません。
最初のタイマーを次のように設定します。
-(void) startSentanceAnimation{
float firstTime = [[sentanceArray objectAtIndex:0][@"time"]floatValue];
[NSTimer scheduledTimerWithTimeInterval:firstTime target:self selector:@selector(timedSentances:) userInfo:sentanceArray repeats:NO];
}
テキストを変更し、新しいタイマーを作成するこのメソッドを呼び出します。
-(void)timedSentances:(NSTimer *)timer{
NSArray *userInfo = timer.userInfo;
timer = nil;
NSString *sentance = [userInfo objectAtIndex:sentanceCount][@"sentance"];
[self nextLine:sentance];
//textLayer.string = sentance;
float intervalLength = [[userInfo objectAtIndex:sentanceCount][@"time"]floatValue];
[NSTimer scheduledTimerWithTimeInterval:intervalLength target:self selector:@selector(timedSentances:) userInfo:userInfo repeats:NO];
sentanceCount++;
}
コードはエラーなく実行され、適切なタイミングでテキストが表示されますが、テキストは一瞬画面に表示されるだけで、メソッド呼び出しの間は持続しません。タイマーへの参照を保持していないためですか?
テキストは、次のようにメソッド nextLine を使用して設定する必要があります。
-(void)nextLine:(NSString *)st{
textLayer.string = st;
}
TextLayer は CATextLayer であり、次のようにインターフェイスで変数として宣言されます。
@interface ICIRecordDetail(){
CATextLayer *textLayer;
}
そして、viewDidLoad メソッドでインスタンス化されます。
また、次のようにテキストを設定しようとしました:
[textLayer setText:sentance];
しかし、同じことが起こります。センテンスはタイマーが作動したときにのみ表示され、その後再び消えます。CATextLayerにあるからなのかな?IOS は非常に新しいため、途方に暮れています。どんな助けでも素晴らしいでしょう。ありがとう