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
}