質問

I have a UISwipeGestureRecognizer that animates accordingly to which UIButton is highlighted at the time of the gesture, it finishes the animation when the UIButton calls TouchUpInside/TouchUpOutside. This works fine for a downward swipe gesture on my UIButton but for some reason when I try a upward swipe (on another UISwipeGestureRecognizer), it doesn't run the function. (yes it is the same UIButton) This is what I did in viewDidLoad:

    [myButton addTarget:self action:@selector(myAction) forControlEvents:(UIControlEventTouchUpInside|UIControlEventTouchUpOutside)];

For the action I just used:

    -(void) myAction{
    //Do whatever I want to do, in this case finish the animation.
    }

None of the code that I run for the swipe gesture should even effect the UIButton, so I guess I'm wondering if anyone has any idea what I could be doing wrong here?

Edit: It seems like the problem is that when I drag upwards too fast the button loses the "focus" (the highlight), therefore TouchUpInside/TouchUpOutside aren't getting called, but when I drag downwards at any speed the UIButton stays highlighted the entire time, anyway to fix this? (see GIF) Watch the highlight end before the mouse leaves the button, then when I do it again, but slower it works fine...

役に立ちましたか?

解決 2

I've fixed it! (Finally, pretty stupid of me) The reason TouchUpInside/TouchUpOutside didn't get called was because I forgot to add

    myGesture.cancelsTouchesInView=NO;

For all my gesture recognizers, thanks anyway everyone.

他のヒント

From our discussion below I understand that you have declared the UIGestureRecognizers in the storyboard but also unnecessarily added them in code. Try cancelling them, see if the UIButton touches work as intended and then decide on a strategy - either create and assign them all in your storyboard or all in code.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top