views:

4502

answers:

3
+5  Q: 

iPhone drag/drop

Trying to get some basic drag/drop functionality happening for an iPhone application.

My current code for trying to do this is as follows:

- (void) touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event
{
    UITouch *touch = [touches anyObject];

    CGPoint location = [touch locationInView:self];
    self.center = location;
}

This code has the result of a the touched UIView flickering while it follows the touch around. After playing around with it a bit, I also noticed that the UIView seemed to flicker from the 0,0 position on the screen to the currently touched location.

Any ideas what I'm doing wrong?

A: 

Are you doing any drawing?

If so you must do it in -drawRect:

Roger Nolan
No drawing, just shifting the position of a UIView around. The code pasted in here was copied from one of the Apple code samples as a starting point for the dragging code.
Farid
+6  A: 

The center property needs to be specified in the coordinate system of the superview, but you've asked the touch event for the location in terms of your subview. Instead ask for them based on the superview's coordinates, like this:

- (void) touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event {
    UITouch *touch = [touches anyObject];   
    CGPoint location = [touch locationInView:self.superview]; // <--- note self.superview

    self.center = location;
}
zpasternack
Seems too obvious a solution to have missed it, silly me. Will check it out tomorrow and get back to you with the result, thanks!
Farid
All working now, thanks again.
Farid
A: 

What if i want to keep that view in boundary ?? any idea?

vallabh joshi