正如在这个SO答案中所解释的,我正试图在UIIMageView
的子类中实现UITapGestureRecognizer
。我的方法可以在下面找到。
MenuButtonImageView
的一个实例是homeScreenViewController.view
的一个子视图。
我还实现了touchesBegan:withEvent:
、touchesMoved:withEvent:
和touchesEnded:withEvent:
,并且做得很好。
问题:不知何故,handleSingleFingeredTap:
从未被调用。这可能有什么问题?
@interface MenuButtonImageView : UIImageView
@property (nonatomic, weak) IBOutlet HomescreenViewController *homeScreenViewController;
@property (nonatomic, readwrite) Visibility visibility;
- (void)handleSingleFingeredTap:(UITapGestureRecognizer *)recognizer;
@end
@implementation MenuButtonImageView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.visibility = HIDDEN;
self.userInteractionEnabled = YES;
UITapGestureRecognizer * singleFingeredTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleFingeredTap:)];
singleFingeredTap.numberOfTapsRequired = 1;
[self addGestureRecognizer:singleFingeredTap];
}
return self;
}
- (void)handleSingleFingeredTap:(UITapGestureRecognizer *)recognizer {
NSLog(@"handleTap was called"); // This method is not called!
[self toggleMainMenu];
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { ... }
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { ... }
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { ... }
@end
在initWithFrame
方法中添加识别器。检查您的视图是否以这种方式初始化。它可能是用另一个构造函数(如initWithCoder
)创建的,然后您的代码就不执行了。在initWithFrame
方法中放置一个断点来查找。
您可以将代码放在一个单独的方法中,并从两个构造函数中调用它。这取决于你如何使用它。当你从代码中创建视图时,initWithFrame
的使用非常常见。