0

アニメーションブロックでUIViewのxプロパティをインクリメントして、画面上でUIViewを移動しようとしています。要素を継続的に移動させたいので、終了xと期間を指定するだけでは不十分です。

このコードは機能しますが、非常に途切れがちです。シミュレーターでは見栄えがしますが、デバイスでは途切れます。

-(void)moveGreyDocumentRight:(UIImageView*)greyFolderView
{
[UIView animateWithDuration:0.05 delay:0 options:UIViewAnimationOptionAllowUserInteraction animations:^{
    NSInteger newX = greyFolderView.frame.origin.x + 5.0;
    greyFolderView.frame = CGRectMake(newX, greyFolderView.frame.origin.y, greyFolderView.frame.size.width, greyFolderView.frame.size.height);
    }
} completion:^(BOOL finished) {
    [self moveGreyDocumentRight:greyFolderView];
}];

}

4

1 に答える 1

3

ここでビューアニメーションと戦っています。各アニメーションにはUIViewAnimationOptionCurveEaseInOutタイミング カーブが含まれています。つまり、0.05 秒ごとに速度を上げてから速度を落とし、別の場所に移動しようとすることを意味します。

最初の最も単純な解決策は、オプションを渡すことによって線形タイミングに変更する可能性がありますUIViewAnimationOptionCurveLinear

とはいえ、5 ミリ秒ごとに新しいアニメーションを作成することは、コア アニメーションの要点と実際に戦い、コードを複雑にし、パフォーマンスを低下させます。フレームを現在移動したい場所に送信します。別の場所に移動したいときはいつでも(まだアニメーション中であっても)、オプションを渡して新しい場所に送信しますUIViewAnimationOptionBeginFromCurrentState。新しいターゲットに自動的に調整されます。アニメーションを繰り返したり前後にバウンスしたい場合は、繰り返しオプション (UIViewAnimationOptionRepeatおよびUIViewAnimationOptionAutoreverse) を使用します。

于 2013-02-05T04:52:46.880 に答える