0

最近、ユーザーが回転できるビューがあるという問題に遭遇しました。ただし、回転中は 10% 大きくする (拡大する) 必要があります。

そのスケーリングをアニメーション化する必要がありますが、ジェスチャ認識エンジンのコールバックでアニメーションなしで設定したため、回転はすぐに表示されます。

質問:CGAffineTransformアニメーション化されているスケールをインターセプトせずに の回転を更新することは可能ですか?それとも、代わりにスケーリングされるラッピング ビューを作成する方法はありませんか?

4

1 に答える 1

1

編集:

スケーリングのラッパー ビューは、エラーが発生しにくい方法だと思います。

どうしてもそれを避けたい場合は、NSTimer を使用して手動でスケーリング アニメーションを作成してみてください。おそらく、最初に現在の変換値を照会してから、(回転とスケールのために) 個別に作成されたものに置き換えるのではなく、それを変更すると、うまくいく可能性があります。

暗黙の UIView アニメーションは最初に後続のすべての値を計算するため、回転が台無しになると思います。

別の方法は、スケーリングが発生している間、回転をロックすることです。欠点は、スケーリングと回転が同時に行われないことです。とにかく、iVar またはプロパティを作成して、sth を実行できますrotationLocked。このような:

- (void)handlePan:(UIPanGestureRecognizer *)gr
{
    if (gr.state == UIGestureRecognizerStateBegan)
    {
        self.rotationLocked = YES;
        [UIView animateWithDuration:.2 animations:^{
            [self scaleView];
        }completion:^{ self.rotationLocked = NO; };
    }
    if (gr.state == UIGestureRecognizerStateChanged)
    {
        if (!self.rotationLocked){
            // do the rotation
    }
    if (gr.state == UIGestureRecognizerStateEnded)
    {
        // do something else
    }
于 2012-10-28T13:53:13.413 に答える