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];
}