I want to have a button that triggers its method under the following conditions:
You need to add the following UIControlEvents to your button:
UIControlEventTouchUpInside
UIControlEventTouchDragOutside
UIControlEventTouchDragInside
as such
[self.myButton addTarget:self action:@selector(dragMoving:withEvent: )
forControlEvents: UIControlEventTouchDragInside | UIControlEventTouchDragOutside];
[self.myButton addTarget:self action:@selector(dragEnded:withEvent: )
forControlEvents: UIControlEventTouchUpInside |
UIControlEventTouchUpOutside];
[self.myButton addTarget:self action:@selector(myButtonTouchDown:withEvent: )
forControlEvents: UIControlEventTouchDown];
Make you method such as -(IBAction)btnTap
and connect to these properties
Touch Down
method for thisTouch Up Inside
for this purposeTouch Drag Inside
Regarding:
- When the user presses the button and drags his/her finger out of the button's area
I recently have done something similar. Here is my code in Swift.
(In this example you subclassed UIButton, like: class FadingButton: UIButton
)
...
// The user tapped the button and then moved the finger around.
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesMoved(touches, with: event)
// Get the point to which the finger moved
if let point: CGPoint = touches.first?.location(in: self) {
// If the finger was dragged outside of the button...
if ((point.x < 0 || point.x > bounds.width) ||
(point.y < 0 || point.y > bounds.height)) {
// Do whatever you need here
}
}
}
...
I hope it helps someone.