Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UIPinchGestureRecognitor已启动两次_Ios_Swift_Uipinchgesturerecognizer - Fatal编程技术网

Ios UIPinchGestureRecognitor已启动两次

Ios UIPinchGestureRecognitor已启动两次,ios,swift,uipinchgesturerecognizer,Ios,Swift,Uipinchgesturerecognizer,我正在向显示图像的滚动视图中添加uipinchgestureerecognizer。 在紧要关头,我提出了一个新的观点 var pinch = UIPinchGestureRecognizer(target: self, action: "showFullScreen:") self.scrollView.addGestureRecognizer(pinch) 全屏显示功能: func showFullScreen(sender:UITapGestureRecognizer) {

我正在向显示图像的滚动视图中添加
uipinchgestureerecognizer
。 在紧要关头,我提出了一个新的观点

var pinch = UIPinchGestureRecognizer(target: self, action: "showFullScreen:")
self.scrollView.addGestureRecognizer(pinch)
全屏显示功能:

func showFullScreen(sender:UITapGestureRecognizer) {     
    presentViewController(photoBro, animated: true, completion: nil)
}
但当我按下scrollView时,
showFullScreen
被调用两次,因此出现以下错误:

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因是:“应用程序试图以模态方式呈现活动控制器

我一直在寻找解决方案,他们建议删除pinchGesture,但我想保留手势识别器,这样用户仍然可以通过按压进入全屏

如何确保一次按压只调用一次showFullScreen

  func showFullScreen(sender:UITapGestureRecognizer) {     
     if(sender.state == UIGestureRecognizerState.Ended) {
         presentViewController(photoBro, animated: true, completion: nil)
     }    
  }
试试这个:

  func showFullScreen(sender:UITapGestureRecognizer) {     
     if(sender.state == UIGestureRecognizerState.Ended) {
         presentViewController(photoBro, animated: true, completion: nil)
     }    
  }

与离散的
UITapGestureRecognizer
uisweepgesturerecognizer
不同,
uipinchgestrerecognizer
是连续的

这意味着轻触和滑动识别器在完成后将发送消息,而捏(和平移)识别器将随着手势的进行不断发送消息,以允许您使用识别器创建交互


正如有人建议的那样,您可以检查识别器状态以在结束时显示控制器,还可以添加标志以确保演示文稿不会被调用两次。这将为您提供更大的灵活性,例如仅在挤压达到一定距离时才显示控制器。

UITapGestureRecognizer
UIWipGestureRecognizer
不同,它们是离散的,
UIPinchGestureRecognizer
是连续的

这意味着轻触和滑动识别器在完成后将发送消息,而捏(和平移)识别器将随着手势的进行不断发送消息,以允许您使用识别器创建交互


正如有人建议的那样,您可以检查识别器状态以在结束时显示控制器,还可以添加标志以确保演示文稿不会被调用两次。这将为您提供更大的灵活性,就像只有在按压达到一定距离时才显示控制器。

如果您不指定要收听的状态,只需从手势中调用选择器即可触发下面列表中的任何/每个状态。

因此,请尝试使用这些状态中的任何一个

您的代码在statedBegan和stateEnded状态下运行了两次


如果不指定要监听的状态,只需通过手势调用选择器即可触发下表中的任何/每个状态。

因此,请尝试使用这些状态中的任何一个

您的代码在statedBegan和stateEnded状态下运行了两次


手势识别器有状态(如开始、移动),您应该区别对待每个状态。必要时,您可能会检查sender.state是否被识别,然后运行代码。比较手势的状态,并且仅在手势.state=UIgestureRecognitizerState.Endedgesture识别器具有状态(如开始、移动)时才执行当前视图控制器,您应该以不同的方式对待每个状态。需要注意的是,您可能会检查sender.state是否被识别,然后运行代码。比较手势的状态,并且仅在手势.state=UIgestureRecognitizerState.Ended时执行当前视图控制器
func showFullScreen(sender:UITapGestureRecognizer) {     
         if (sender.state == UIGestureRecognizerState.Began) {

    }
    if (sender.state == UIGestureRecognizerState.Ended) {
       //your dismiss code here
    }