0

ユーザーがドラッグを開始したときに拡大する UIView をアニメーション化し、ドラッグを停止すると折りたたむようにアニメーション化しようとしています。iOS5 では、これは機能しているようですが、完全ではありません。ビューは拡大中に現在の指の位置に移動するアニメーションを表示しますが (ラグが発生します)、拡大アニメーションが終了すると正常に機能します。

iOS4 では、これは壊れています。ビューはアニメーションで拡大しますが、アニメーションが終了するまでユーザーの指でまったく動きません。

私に何ができる?

- (void)gestureRecognizerMoved:(id)sender
{
    [self.view bringSubviewToFront:[(UIPanGestureRecognizer*)sender view]];
    CGPoint translatedPoint = [(UIPanGestureRecognizer*)sender translationInView:self.view];
    NSLog(@"translated x %f y %f", translatedPoint.x, translatedPoint.y);

    if([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateBegan)
        {
        firstX = [sender view].center.x;
        firstY = [sender view].center.y;

        NSLog(@"first x %f y %f", firstX, firstY);
    }

    translatedPoint = CGPointMake([sender view].center.x, firstY+translatedPoint.y);
    [[sender view] setCenter:translatedPoint];

    if([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateBegan)
    {
        [UIView animateWithDuration:0.8f animations:^(void)
         {
             CGRect frame = [sender view].frame;
             frame.size.width += 200.0f;
             [sender view].frame = frame;
         }];
    }

    if([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded)
    {
        [UIView animateWithDuration:0.8f animations:^(void)
         {
             CGRect frame = [sender view].frame;
             frame.size.width -= 200.0f;
             [sender view].frame = frame;
         }];
    }
}

編集: ビューのフレームを変更するのではなく、Core Graphics アフィン変換を使用してビューのサイズを変更する (CGAffineTransformMakeScale など) と、iOS5 のラグが解消されるため、プレス位置にアニメーション化するのではなく、アニメーション中でもユーザーの指のプレスに固執するようになりました。 、 完全!ただし、iOS4 でも同じ問題が発生します。

4

2 に答える 2

1

UIViewAnimationOptionBeginFromCurrentStateおそらく、アニメーション オプションに含める必要があります。

編集:

UIViewAnimationOptionBeginFromCurrentStateアニメーションが終了する前にジェスチャが終了する可能性があるため、使用する必要があります。

ビューcenterの変更は、ビューを変更するもう 1 つの方法ですframe。2 つのプロパティは同じデータを変更します。サイズをアニメーション化してから、(アニメーションの動作を上書きして)frameフレームを直接変更すると、center希望する結果が得られません。

私が見る最も簡単な解決策は、ビューを透明なコンテナーに入れ、ビューがまだそのサイズをアニメーション化できる間にコンテナーの位置を変更することです。

于 2012-05-31T11:08:20.317 に答える
0

UIViewAnimationOptionAllowUserInteraction オプションを使用してみてください。動作するはずです:)

于 2012-06-03T19:35:44.750 に答える