禁用手势识别器
Disable GestureRecognizer
我有一个简单的记忆游戏。
但是我想关闭tap功能
当我使用 imageViewGurka1.gestureRecognizers=NO;
时它有效,但我收到警告消息:Initialization of pointer of type 'NSArray *' to null from a constant boolean expression
。 (我应该怎么做才能修复此警告消息?)
如果我使用这个 imageViewGurka1 setUserInteractionEnable:NO;
我不会收到警告消息,但我将无法再移动图像。
这是部分代码。
-(IBAction)handleTapGurka1:(UIGestureRecognizer *)sender {
if (imageViewGurka1.tag == 0) {
[imageViewGurka1 setImage:[UIImage imageNamed:@"memorySångerGurka.png"]];
imageViewGurka1.tag=1;
[self.view bringSubviewToFront:imageViewGurka1];
}
else {
[imageViewGurka1 setImage:[UIImage imageNamed:@"memorySångerBaksida.png"]];
imageViewGurka1.tag=0;
[self.view bringSubviewToFront:imageViewGurka1];
}
if (imageViewGurka1.tag==1 && imageViewGurka2.tag==1) {
NSURL *musicFile;
musicFile = [NSURL fileURLWithPath:
[[NSBundle mainBundle]
pathForResource:@"applader"
ofType:@"mp3"]];
myAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:musicFile error:nil];
[myAudio play];
//[imageViewGurka1 setUserInteractionEnabled:NO];
//[imageViewGurka2 setUserInteractionEnabled:NO];
imageViewGurka1.gestureRecognizers=NO;
imageViewGurka2.gestureRecognizers=NO;
}
}
感谢您的帮助!
此致
gestureRecognizers
是一个数组,其中包含附加到视图的所有手势识别器。您应该遍历该数组中的所有手势识别器并将它们的 enabled
属性 设置为 false,如下所示:
for (UIGestureRecognizer * g in imageViewGurka1.gestureRecognizers) {
g.enabled = NO;
}
Swift 5
低于 Swift 5
for gesture in imageViewGurka1.gestureRecognizers! {
gesture.isEnabled = false
}
Storyboard/Outlet解决方案
背景:
我有一个 UIView,我想像一个按钮一样工作,所以我向它添加了一个点击手势识别器。当用户点击 'button' 我想禁用该按钮,执行一些动画,并在动画结束后重新启用该按钮。
解决方案:如果您正在使用故事板并且将手势识别器添加到 UIView,请按住 control 并从手势识别器拖动到辅助编辑器中以创建一个出口。然后你可以设置gestureRecognizerName.isEnabled = false
.
@IBOutlet var customButtonGestureRecognizer: UITapGestureRecognizer!
@IBAction func didTapCustomButton(_ sender: Any) {
customButtonGestureRecognizer.isEnabled = false
performSomeAnimation(completionHandler: {
self.customButtonGestureRecognizer.isEnabled = true
})
}
在 swift4,
如果在多个视图上有多个手势,您可以启用和禁用这样的手势。
假设我们有 UIView 数组,我们想要禁用一个手势,这是添加到名为 ourView 的视图数组中第一个视图的第一个手势。
ourView[0].gestureRecognizers![0].isEnabled = false
您也可以像这样同时启用或禁用所有手势。
for k in 0..<ourView.count {
for l in 0..<outView[k].gestureRecognizers.count {
ourView[k].gestureRecognizers![l].isEnabled = false
}
}
基于 Apple 的 Documentation,您还可以使用:
func removeTarget(Any?, action: Selector?)
我有一个简单的记忆游戏。 但是我想关闭tap功能
当我使用 imageViewGurka1.gestureRecognizers=NO;
时它有效,但我收到警告消息:Initialization of pointer of type 'NSArray *' to null from a constant boolean expression
。 (我应该怎么做才能修复此警告消息?)
如果我使用这个 imageViewGurka1 setUserInteractionEnable:NO;
我不会收到警告消息,但我将无法再移动图像。
这是部分代码。
-(IBAction)handleTapGurka1:(UIGestureRecognizer *)sender {
if (imageViewGurka1.tag == 0) {
[imageViewGurka1 setImage:[UIImage imageNamed:@"memorySångerGurka.png"]];
imageViewGurka1.tag=1;
[self.view bringSubviewToFront:imageViewGurka1];
}
else {
[imageViewGurka1 setImage:[UIImage imageNamed:@"memorySångerBaksida.png"]];
imageViewGurka1.tag=0;
[self.view bringSubviewToFront:imageViewGurka1];
}
if (imageViewGurka1.tag==1 && imageViewGurka2.tag==1) {
NSURL *musicFile;
musicFile = [NSURL fileURLWithPath:
[[NSBundle mainBundle]
pathForResource:@"applader"
ofType:@"mp3"]];
myAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:musicFile error:nil];
[myAudio play];
//[imageViewGurka1 setUserInteractionEnabled:NO];
//[imageViewGurka2 setUserInteractionEnabled:NO];
imageViewGurka1.gestureRecognizers=NO;
imageViewGurka2.gestureRecognizers=NO;
}
}
感谢您的帮助!
此致
gestureRecognizers
是一个数组,其中包含附加到视图的所有手势识别器。您应该遍历该数组中的所有手势识别器并将它们的 enabled
属性 设置为 false,如下所示:
for (UIGestureRecognizer * g in imageViewGurka1.gestureRecognizers) {
g.enabled = NO;
}
Swift 5
低于 Swift 5
for gesture in imageViewGurka1.gestureRecognizers! {
gesture.isEnabled = false
}
Storyboard/Outlet解决方案
背景: 我有一个 UIView,我想像一个按钮一样工作,所以我向它添加了一个点击手势识别器。当用户点击 'button' 我想禁用该按钮,执行一些动画,并在动画结束后重新启用该按钮。
解决方案:如果您正在使用故事板并且将手势识别器添加到 UIView,请按住 control 并从手势识别器拖动到辅助编辑器中以创建一个出口。然后你可以设置gestureRecognizerName.isEnabled = false
.
@IBOutlet var customButtonGestureRecognizer: UITapGestureRecognizer!
@IBAction func didTapCustomButton(_ sender: Any) {
customButtonGestureRecognizer.isEnabled = false
performSomeAnimation(completionHandler: {
self.customButtonGestureRecognizer.isEnabled = true
})
}
在 swift4,
如果在多个视图上有多个手势,您可以启用和禁用这样的手势。
假设我们有 UIView 数组,我们想要禁用一个手势,这是添加到名为 ourView 的视图数组中第一个视图的第一个手势。
ourView[0].gestureRecognizers![0].isEnabled = false
您也可以像这样同时启用或禁用所有手势。
for k in 0..<ourView.count {
for l in 0..<outView[k].gestureRecognizers.count {
ourView[k].gestureRecognizers![l].isEnabled = false
}
}
基于 Apple 的 Documentation,您还可以使用:
func removeTarget(Any?, action: Selector?)