我在子视图视图上有一个按钮(为了说话,子视图是一个红色方块),当用户按住按钮时,红色方块动画半透明。
我有按钮连接到此方法:
-(IBAction)peekToggle:(id)sendr{
NSLog(@"TOGGLE");
if(self.view.alpha ==1)self.view.alpha = 0.1;
else self.view.alpha = 1;
}
通过行为:touch up inside
,touch up outside
和touch down
。因此,当我按住按钮时,红色框会变为半透明状,当我松开手指时,它会返回不透明状态。
这最初工作正常,但如果按住按钮超过1秒,该按钮不会注册touch up
(释放手指)。
注意:我在父视图上有一个longPressGestureRecogniser(子视图的父节点而不是Button的父节点),但它没有被触发(预期)。
我很确定我长按此按钮被注册为touch cancel
,然后使补缺事件无效。
如何预防/解决此问题?
我可以停止touch Cancel
开火吗? (即使我已经注册了控制状态,这个事件似乎也会触发)或者在touch Cancel
事件中,告诉按钮保持/开始注册事件?
答案 0 :(得分:3)
<强> SOLUTION:强>
完全删除了IBActions,并将UILongPressGestureRecognizer
添加到按钮,持续时间非常短。
UILongPressGestureRecognizer * recognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
recognizer.minimumPressDuration = 0.1;
[self.peekButton.view addGestureRecognizer:recognizer];
[recognizer release];
然后在gr的选择器中,读取gr的状态:
- (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer{
//1 = start
if(gestureRecognizer.state==1 || gestureRecognizer.state==3)[self peekToggle];
//3=end
}
答案 1 :(得分:1)
如果您认为这是您的问题,可以尝试覆盖- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
并查看是否在那里进行任何活动。
答案 2 :(得分:1)
您可以使用UIGestureRecognizerDelegate界面在手势识别器被触发时进行微调。