2

我正在通过这段代码移动视图,它运行良好,但有时它们非常跳跃,对此有什么想法吗?

[[[(UITapGestureRecognizer*)sender view] layer] removeAllAnimations];

[self.view bringSubviewToFront:[(UIPanGestureRecognizer*)sender view]];
CGPoint translatedPoint = [(UIPanGestureRecognizer*)sender translationInView:self.view];

if([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateBegan) {

    firstX = [[sender view] center].x;
    firstY = [[sender view] center].y;
}

translatedPoint = CGPointMake(firstX+translatedPoint.x, firstY+translatedPoint.y);

[[sender view] setCenter:translatedPoint];

if([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded) {

    CGFloat finalX = translatedPoint.x + (.35*[(UIPanGestureRecognizer*)sender velocityInView:self.view].x);
    CGFloat finalY = translatedPoint.y + (.35*[(UIPanGestureRecognizer*)sender velocityInView:self.view].y);


[UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:.35];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
    [[sender view] setCenter:CGPointMake(finalX, finalY)];
    [UIView commitAnimations];
4

1 回答 1

1

您上面的代码中的任何内容似乎都不会减慢平移速度。UI 上的任何缓慢响应都有 99% 的时间是由重新绘制引起的。看看你正在平移的视图的 drawRect 代码(如果你已经实现了它)。如果每次平移时都会调用它,那可能会导致您出现问题。您可以通过在视图中将 rasterize 属性设置为 YES 来解决此问题。

于 2012-02-27T11:12:06.503 回答