0

タイムラインアプリケーションのコントロールで別の問題が発生しました。

私のTimelineViewには、UIViewから継承した一定量のUILabelがあります。

スクロール機能を実装しましたが、問題なく動作します。要素が下部に到達すると、要素は削除され、別のUILabelが最初の要素の上に追加されます。Classesデリゲートには、すべてのUIlabels(TimeLabels)が格納および削除されるlabels配列があります(後の実装で重要です)。時間/日など-メモリ使用量が少なくなるように動的ロード)

ここで、touchgestureをリリースした後(touchesEndedを介して)、正しく計算された一定の速度で、イーズアウトアニメーションを実行したいと思います。UIViewアニメーションでは非常にうまく機能します。

speed/=3;
for(TimeLabel *movingLabel in self.delegate.labels){
    NSLog(@"%i",movingLabel.time);
    [UIView beginAnimations:@"" context:NULL];
    [UIView setAnimationDuration:2.0];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];


    CGRect movingFrame = [[movingLabel.layer presentationLayer] frame];
    NSLog(@"%f",movingFrame.origin.y);

    movingLabel.frame = CGRectMake(7, movingLabel.frame.origin.y+speed, 200, 25);

    [UIView commitAnimations];

}

アニメーションはすべてのラベルに対して正しく行われます。

しかし、ラベルの位置がアプリケーションのフレームの高さより下に下がったときに、(他の人によると、現在の位置を取得する可能性があるpresentationLayerを使用しても)ラベルの位置が下がらないように、メソッド(上記には表示されていません)を拡張したい場合アニメーション中。ただし、ログに記録するときにすべてのラベルの終了位置のみが表示されます...)。

だから私の質問:それをアニメーション化しながらその位置をチェックすることによってUILabelを削除することさえ可能ですか?そして、その質問と同じくらい重要です。新しいUILabelを挿入し、たとえば、削除されたラベルレイヤーを追加して、開始されたアニメーションを新しいアニメーションで再開できるようにすることは可能ですか?

そして、それらのことが不可能な場合:まったく新しいアニメーションを実装せずに、そのような簡単なアニメーションを実現する別の方法はありますか?

正確にどのように見えるかを説明するのは少し難しいですが、私の問題を適切に説明できればと思います。私を助けてくれる人がいます。

ご挨拶、

Âsgaroth

4

1 に答える 1

1

場合によっては、アニメーションを別の y 位置で完了させたいだけのようです。それを行う簡単な方法は(質問を正しく理解している場合)、ラベルを削除するy位置を計算し、そこにアニメーション化し、追加することです...

[UIView setAnimationDidStopSelector:@selector(removeFromSuperview)];

あなたは「フレームの高さの下に落ちる」と言った。レーベルのスーパービューのフレームの高さですか?その場合、 の終了位置を に設定label.frame.origin.yしますlabel.superview.bounds.size.height

于 2013-03-08T15:52:39.983 に答える