我在目标和选择器中添加了一些UIGestureRecognizers。我只谈一个,因为另一个我会肯定的。
我添加了UIPinchGestureRecognizer
UIPinchGestureRecognizer *pinch = [UIPinchGestureRecognizer new];
[pinch addTarget:self action:@selector(pinchGestureDetected:)];
[self.view setMultipleTouchEnabled:YES];
[self.view addGestureRecognizer:pinch];
现在我的目标是在收到捏手势时简单地调用此方法一次。但是,当人们捏住时,它仍然继续称之为。我将它用作页面导航的一部分,并在检测到捏合时更新视图。
所以在我的 - (void)pinchGestureDetected:(UIPinchGestureRecognizer)捏合方法我将调用另一种方法。有点像...这是一个小sudo
-(void)pinchGestureDetected:(UIPinchGestureRecognizer)pinch
{
if (pinch.scale > 1) layoutViewWithMoreDetail;
else layoutViewWithLessDetail;
}
所以我不希望它继续调用此方法,否则将继续调用布局方法。我想要一个布局/捏合手势。
一旦确定了比例,有没有办法可以停止检测捏?一路走来......
-(void)pinchGestureDetected:(UIPinchGestureRecognizer)pinch
{
if (pinch.scale > 1)
{
layoutViewWithMoreDetail;
stop receiving pinch gestures till this.gesture is finished;
}
我会诋毁GestureDelegate吗?
-(void)pinchGestureDetected:(UIPinchGestureRecognizer)pinch
{
if (pinch.scale > 1 && pinching == NO )
{
layoutViewWithMoreDetail;
pinching = YES;
}
然后在手势代表结束...捏=否;
感谢您的帮助
答案 0 :(得分:2)
UPinchGestureRecognizer
是一个连续的手势 - 使用if(pinch.state == UIGestureRecognizerStateBegan)
来检测事件是否刚刚开始。
但是,这会导致触发事件的阈值较低。另一种方法是在触发满意时快速禁用和启用手势,如下所示:
-(void)pinchGestureDetected:(UIPinchGestureRecognizer)pinch
{
if (pinch.scale > 1)
{
//do your stuff here
pinch.enabled = NO;
pinch.enabled = YES;
}
}
这是因为如果您查看documentation,它会说明:
启用
一个布尔属性,指示是否启用手势识别器。 @property(nonatomic,getter = isEnabled)启用BOOL
讨论
禁用手势识别器,使其无法接收触摸。默认值为YES。如果在手势识别器当前正在识别手势时将此属性更改为“否”,则手势识别器将转换为已取消状态。