【发布时间】:2016-08-08 17:21:36
【问题描述】:
我的应用由一副纸牌组成。卡片组中的大多数卡片都是在 draggableView 中制作的。我正在努力做到这一点,以便在屏幕上双击将使我在卡上的按钮消失/重新出现。阅读此post 后,我尝试尝试一下。我将 UITapGesture 放入了我的 draggableView 类的 initWithFrame 方法中,如下所示:
- (id)initWithFrame:(CGRect)frame
self = [super initWithFrame:frame];
if (self) {
[self addSubviewFromNib];
[self setupView];
panGestureRecognizer = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(beingDragged:)];
cardWidth = frame.size.width;
cardHeight = frame.size.height;
type = 0;
panGestureRecognizer.delegate = self;
panGestureRecognizer.cancelsTouchesInView = NO;
_backgroundScrollView.panGestureRecognizer.cancelsTouchesInView = NO;
//...more code above....
_backgroundScrollView.userInteractionEnabled = YES;
tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:_backgroundScrollView action:@selector(doubleTap)];
tapGestureRecognizer.delegate = _backgroundScrollView;
tapGestureRecognizer.numberOfTapsRequired = 2;
[_backgroundScrollView addGestureRecognizer:tapGestureRecognizer];
[self addGestureRecognizer:panGestureRecognizer];
}
- (void) doubleTap: (UITapGestureRecognizer *)tapGesturerecognizer{
_mapButton.hidden = !_mapButton.hidden;
_menuButton.hidden = !_menuButton.hidden;
_phoneButton.hidden = !_phoneButton.hidden;
reviewButton.hidden = !reviewButton.hidden;
_shareButton.hidden = !_shareButton.hidden;
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
// If the gesture recognizer is a UITapGestureRecongizer, but the other
// gesture detected is a UIPanGestureRecognizer, require the
// UITapGestureRecognizer to fail.
if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]] &&
[otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) {
return YES;
} else {
return NO;
}
}
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]) {
return YES;
}
if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) {
UIPanGestureRecognizer *panGesture = (UIPanGestureRecognizer *)gestureRecognizer;
CGPoint velocity = [panGesture velocityInView:self];
return fabs(velocity.y) <= fabs(velocity.x);
}
return YES;
}
但是,如果我双击,我会收到这个 sib abrt 错误:
-[UITapGestureRecognizer velocityInView:]: unrecognized selector sent to instance 0x7f9f9a244230
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITapGestureRecognizer velocityInView:]: unrecognized selector sent to instance 0x7f9f9a244230'
我假设这意味着 PanGestureRecognizer 和 TapGesture 识别器之间存在错误。我该如何解决?
编辑:仍未解决,但如果我将 tapGesture 添加到可拖动视图(因此,self)而不是 _backgroundScrollView,我会收到此错误:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[DraggableView doubleTap]: unrecognized selector sent to instance 0x7fefdd9e4f70'
其他编辑:我将它改回 backgroundScrollView,现在我得到这个错误:
[UIScrollView doubleTap]: unrecognized selector sent to instance 0x7fe5130af000
【问题讨论】:
-
也贴出平移手势相关的代码。另外请发布正确的代码,您在发布的代码中缺少右括号。
-
用更多代码更新了它
-
gestureRecognizerShouldBegin 将被调用,当手势识别器即将处理触摸时,它可能是点击手势,也可能是平移手势。你需要检查gestureRecogniser类型,然后继续,
-
我尝试了该线程中提供的解决方案,但仍然得到相同的 sig abrt 错误:/
标签: objective-c uibutton uipangesturerecognizer uitapgesturerecognizer