title: Touch and drag a UIButton around, but don't trigger it when releasing the finger
body: <p>I'm trying to allow some <code>UIButton</code> instances on one of my views to be touched and dragged around the screen (eventually with momentum, but that's for later!). I have this working in a very simple form, shown below, but the problem is that by touching the button to begin dragging it, it attaches to the finger, and by lifting the finger off, the "Touch Up Inside" event is triggered, which is the code I want to execute when actually tapping the button.</p>
  
  <p>In a nutshell: how do I differentiate between a tap, and a drag/release? Do I need to change the tap to a short-tap gesture recognizer, or similar, perhaps? Code:</p>
  
  <p>In viewDidLoad:</p>
  
  <pre><code>[firstButton addTarget: self action: @selector(wasDragged: withEvent:) forControlEvents: UIControlEventTouchDragInside];
  </code></pre>
  
  <p>And my wasDragged method:</p>
  
  <pre><code>- (void)wasDragged:(UIButton *)button withEvent:(UIEvent *)event
  {
      if (button == letter1Button) {
          UITouch *touch = [[event touchesForView:button] anyObject];
  
          CGPoint previousLocation = [touch previousLocationInView:button];
          CGPoint location = [touch locationInView:button];
          CGFloat delta_x = location.x - previousLocation.x;
          CGFloat delta_y = location.y - previousLocation.y;
  
          button.center = CGPointMake(button.center.x + delta_x, button.center.y + delta_y);
      }
  }
  </code></pre>