Ios 检查是否已调用某个方法,不要再次调用它

Ios 检查是否已调用某个方法,不要再次调用它,ios,objective-c,cocoa-touch,Ios,Objective C,Cocoa Touch,在touchsbegind中,我调用一个方法[self-animateWindow]当我触摸ui标签时。它会设置动画并从顶部打开窗口。当我再次触摸UILabel时,我不想要那种方法[self-animateWindow]将被再次调用,因为它会重新设置已显示的窗口的动画并将其显示出来。我该怎么做?有什么帮助吗?我试着到处搜索,找不到确切的答案。只需创建一个实例变量,该变量是BOOL,并将其用作标志: @property (assign, monatomic) BOOL hasAnimated;

touchsbegind
中,我调用一个方法
[self-animateWindow]当我触摸
ui标签时。它会设置动画并从顶部打开窗口。当我再次触摸
UILabel
时,我不想要那种方法
[self-animateWindow]
将被再次调用,因为它会重新设置已显示的窗口的动画并将其显示出来。我该怎么做?有什么帮助吗?我试着到处搜索,找不到确切的答案。

只需创建一个实例变量,该变量是BOOL,并将其用作标志:

@property (assign, monatomic) BOOL hasAnimated;

- (void) touchesBegan...
{
    if (!self.hasAnimated) {
        [self animateWindow];
        self.hasAnimated = YES;
    }
}

根据您在评论中的扩展描述,您需要添加更多的逻辑来检查哪个标签实际被触摸。更好的解决方案可能是在每个标签上使用手势识别器。然后,您可以直接访问手势识别器的视图,以检查它是哪个标签(可能使用
标记
),并且您可以根据您所处的状态添加和删除手势(只有一些标签应该响应触摸,并且它们应该显示或隐藏).

只需创建一个实例变量,该变量是BOOL,并将其用作标志:

@property (assign, monatomic) BOOL hasAnimated;

- (void) touchesBegan...
{
    if (!self.hasAnimated) {
        [self animateWindow];
        self.hasAnimated = YES;
    }
}

根据您在评论中的扩展描述,您需要添加更多的逻辑来检查哪个标签实际被触摸。更好的解决方案可能是在每个标签上使用手势识别器。然后,您可以直接访问手势识别器的视图,以检查它是哪个标签(可能使用
标记
),并且您可以根据您所处的状态添加和删除手势(只有一些标签应该响应触摸,并且它们应该显示或隐藏)

您可以在函数调用之前或期间检查当前状态吗?这是C++、Objtovior C还是ObjuleC++?如果需要,请重新标记它。Objul-C感谢您的询问。您可以在函数调用之前或期间检查当前状态吗?这是C++、Objtovior C还是ObjuleC++?如果合适,请重新标记。Objective-C感谢您的提问。在viewDidLoad中,我是否应该将BOOL hasAnimated=FALSE?对状态“hasAnimated=FALSE;”在你的viewDidLoad中。我这样做了,但现在根本没有打开窗口。问题是我有5个以上的标签。当我触摸一个标签时,我希望窗口设置动画并向下放置,如果窗口已经向下放置,我不希望调用该函数,即没有动画并向下放置。当我单击除标签以外的其他内容时,我希望下拉窗口设置动画并再次向上。从技术上讲,您应该将其设置为“否”(非false),并将其默认值设置为“否”。即使添加手势识别器,同样的问题仍然存在。例如,如果(touch.view.tag>=1&&touch.view.tagin viewdiload我应该在viewdiload中设置BOOL hasAnimated=FALSE;?是的。在viewdiload中设置“hasAnimated=FALSE;”状态。我这样做了,但它现在根本不会显示窗口。问题是我有5个以上的标签。当我触摸一个标签时,如果窗口是al,我希望窗口设置动画并下拉ready down,我不希望调用该函数,即无动画和下拉。当我单击除label以外的其他内容时,我希望下拉窗口动画并再次向上。从技术上讲,您应该将其设置为no(非false),它应该默认为NO。即使添加手势识别器,同样的问题仍然存在。例如,如果(touch.view.tag>=1&&touch.view.tag