gpt4 book ai didi

objective-c - Objective-C 和 iOS : running a timer? NSTimer/线程/NSDate/等

转载 作者:可可西里 更新时间:2023-11-01 03:39:30 28 4
gpt4 key购买 nike

我正在开发我的第一个 iOS 应用程序,遇到了第一个问题,我一直找不到好的答案。

问题:我有一个自定义的 UIGestureRecognizer 并正确连接了它,我可以在识别后为 @selector 中的每个触摸运行代码。这对大多数事情来说都很好,但对其他人来说有点太多了。

我的目标:制作一个定时器,在指定的时间间隔触发以运行逻辑,并能够在触摸被取消时取消它。

为什么我在这里问:解决方案有很多可能性,但没有一个是最适合实现的。目前看来

  • performSelector(以及一些变体)
  • NSThread
  • NSTimer
  • NSDate
  • 操作队列
  • 我想我也找到了其他一些......

从所有研究来看,某种形式的制作线程似乎是可行的方法,但我不知道哪种方式最适合这种情况。

实现示例:NSPoint 每 0.10 秒获取一次,并获取前一个点和当前点之间的距离。 [计算每个点之间的距离会产生非常困惑的结果]。

相关代码:

- (void)viewDidLoad {
CUIVerticalSwipeHold *vSwipe =
[[CUIVerticalSwipeHold alloc]
initWithTarget:self
action:@selector(touchHoldMove:)];
[self.view addGestureRecognizer:vSwipe];
[vSwipe requireGestureRecognizerToFail:doubleTap];
}

...

- (IBAction)touchHoldMove:(UIGestureRecognizer *)sender {
if (sender.state == UIGestureRecognizerStateEnded) {

}

if (sender.state == UIGestureRecognizerStateBegan) {

}

//other stuff to do goes here

}

最佳答案

使用 NSTimer

这样设置:

    theTimer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(yourMethodThatYouWantRunEachTimeTheTimerFires) userInfo:nil repeats:YES];

然后当你想取消它的时候,做这样的事情:

    if ([theTimer isValid])
{
[theTimer invalidate];
}

请注意,在上面的示例中,您需要声明 NSTimer 的“theTimer”实例,它可用于两种方法。在上面的示例中,“0.5”表示计时器将每秒触发两次。根据需要进行调整。

关于objective-c - Objective-C 和 iOS : running a timer? NSTimer/线程/NSDate/等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8640733/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com