0

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 は非常に新しいため、途方に暮れています。どんな助けでも素晴らしいでしょう。ありがとう

4

0 に答える 0