基于hacker2007的流畅动画回答:
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *aTouch = [touches anyObject];
CGPoint location = [aTouch locationInView:gridContainerView];
for (UIView *subView in gridContainerView.subviews) {
if (conditionForBeingAGridBlock && CGRectContainsPoint(subview.frame, touchPoint))
{
[UIView beginAnimations:@"Dragging A DraggableView" context:nil];
self.frame = CGRectMake(0, location.y, subview.frame.size.width, subview.frame.size.height);
[UIView commitAnimations];
}
}
}
这将移动您在手指下拖动的视图,您可以自己添加检查以确保它不会去它不能去的地方。但这将使您获得平滑的拖动动画。
似乎问题在于您在动画中将框架设置为:目前,每次您稍微移动正方形时,您都会在这里获得一个新的矩形:
CGRect rect = [self.grid getCellRect:self.grid.gridView x:cell.x y:cell.y];
然后在你的动画中你这样做:
self.frame = rect;
然后将框设置为该矩形。因此,如果您非常快速地移动手指,那么您将获得“跳过”效果。如果你把它改成这样:
self.frame = CGRectMake(location.x - self.bounds.size.width / 2, location.y - self.bounds.size.height / 2, self.bounds.size.width, self.bounds.size.height);