开发者

Always animate UIView to user's tap location

I have a UIView that I want to animate to the position where the user's finger currently is.

So, when the touch begins, it has to anim开发者_高级运维ate to the tap location.

When the touch moves, it has to adjust its destination to the new location.

When the touch ends, it has to finish the animation to the last tap location.

I tried several things but none worked out. I tried creating a new animation with beginsFromCurrentState in touchesMoved, but that didn't work too.


It seems you're complicating this a little bit. If you are implementing touchesMoved, you are wanting a drag. If you are more interested in a tap, then touchesEnded is where you want to implement this. Either way, you just need to get the location in view and update your UIView's center based upon that location. If you wrap the change to the center value in a UIView animation block, it will animate to the position as it updates.

If you are using iOS 3.2 or later, you can use gesture recognizers which makes this pretty trivial:

// In viewDidLoad or some such
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc]
                         initWithTarget:self action:@selector(viewWasTapped:)];
[[self view] addGestureRecognizer:tapRecognizer];

Then declare your action selector:

- (void)viewWasTapped:(UITapGestureRecognizer*)recognizer
{
  CGPoint location = [recognizer locationInView:[self view]];
  [UIView beginAnimations:nil context:NULL];
  [UIView setAnimationDuration:1.0f]; // take a second to animate
  [viewToMove setCenter:location];
  [UIView commitAnimations];
}

This will animate the view from one location to another. This is referred to as implicit animation. Using Core Animation classes such CAKeyframeAnimation or CABasciAnimation would be explicit animation.


Need a few more details for this.. But are you sure you are using touchesBegan, touchesMoved and touchesEnded from the appropriate view (ie not the view you want to move)? Also make sure the userInteractionEnabled = YES. Try logging the touches from touchesBegan to make sure you are receiving the touches.

Or you might want to just check out Apples MoveMe sample code at https://developer.apple.com/library/ios/#samplecode/MoveMe/Introduction/Intro.html where they have solved all those problems for you.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜