編集:
スケーリングのラッパー ビューは、エラーが発生しにくい方法だと思います。
どうしてもそれを避けたい場合は、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
}