kolyvan / kxmenu

KxMenu is a vertical popup menu for using in iOS applications

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Use Gesture Recognizer to dismiss menu

horaceho opened this issue · comments

If Gesture Recognizer is enabled in the superview, the touchesEnded event will not be fired in KxMenuOverlay.

As a quick fix, add a gesture recognizer in KxMenuOverlay:

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        self.backgroundColor = [UIColor clearColor];
        self.opaque = YES;

        UITapGestureRecognizer *singleFingerTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTap:)];
        [self addGestureRecognizer:singleFingerTap];
    }
    return self;
}

- (void)singleTap:(UITapGestureRecognizer *)recognizer
{
    for (UIView *v in self.subviews) {
        if ([v isKindOfClass:[KxMenuView class]] && [v respondsToSelector:@selector(dismissMenu:)]) {
            [v performSelector:@selector(dismissMenu:) withObject:@(YES)];
        }
    }
}

@(YES) was an object, so the animated was no always
As I fix

-(void)singleTap:(UITapGestureRecognizer *)recognizer {
for (UIView *v in self.subviews) {
if ([v isKindOfClass:[KxMenuView class]] && [v respondsToSelector:@selector(dismissMenu:)]) {
// [v performSelector:@selector(dismissMenu:) withObject:@(YES)];
[v performSelector:@selector(tapEvent:) withObject:[NSNumber numberWithBool:YES]];
}
}
}

and add the method in KxMenuOverlay

-(void)tapEvent:(id)object {
BOOL animated = [(NSNumber *)object boolValue];
[self dismissMenu:animated];
}