1

では、ブロック アニメーションを使用してラベルをアニメーション化することにしました。

ロジックは非常に単純です。ボタンで構成されたチャートバーがあり、ボタンが押されると幅のないラベルが作成され、同じ方法でアニメーションがラベルを長くし始め、ラベル内の単語が出てきて、2.5 秒の短い遅延の後、ラベルは再び縮小し、スーパービューから削除されました。

問題は :

  • 遅延は OS 4.3 で正しく機能しています。アニメーションは意図したとおりに機能し、ラベルが表示されます。2.5 以降では、次のアニメーションが開始され、ラベルが閉じられます。

  • OS 5.0 では遅延は無視されます。最初のアニメーションが完了した後、遅延を待たずに、次のアニメーション ブロックをすぐに開始します。

アニメーションに関する私のコードの一部を次に示します。

UILabel *lbl = [self createLabelWithText:numString frame:CGRectMake(touchPoint.x, touchPoint.y, 0, 10) bold:YES font:@"Helvetica" fontSize:10 color:[UIColor whiteColor] textAlignment:UITextAlignmentLeft andTag:987];
    [lbl setBackgroundColor:[UIColor blackColor]];
    [lbl setAlpha:0.5];
    [self.view addSubview:lbl];

    [UIView animateWithDuration:0.3 animations:^
     {
         [lbl setFrame:lblRect];
     }completion:^(BOOL finished) 
     {
        [UIView animateWithDuration:0.2 delay:2.5 options:UIViewAnimationOptionCurveEaseInOut animations:^
         {//here the second animation delay run properly on 4.3 , but ignored at 5.0
             [lbl setFrame:CGRectMake(touchPoint.x, touchPoint.y, 0, 10)];
         }completion:^(BOOL finished) {
             [lbl removeFromSuperview];
         }];
     }];

よろしくお願いします。

編集 : なぜこの人が Google やその他のスタックオーバーフローの質問で検索しなかったのか疑問に思っている方のために、実際に検索しましたが、悲しいことに、見つけたすべての投稿で必要な回答が得られません。:(

4

1 に答える 1

1

さて、私は問題を見つけました。これは、ブロックアニメーションのせいではなく、uilabelを幅「0」に縮小するようにアニメーションを設定したために発生するエラーです。IOS 5.0(少なくとも私のプロジェクトでは)では、制約を使用してラベルサイズを設定したため、ラベルを縮小しようとすると、ラベルを読み取るとすぐにテキスト全体を表示できなくなり、すぐに終了します。自分自身にラベルを付けます。

于 2012-05-08T07:25:50.233 に答える