我正在尝试在用户开始拖动 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中仍然遇到同样的问题。