ユーザーがドラッグを開始したときに拡大する 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 でも同じ問題が発生します。