gpt4 book ai didi

ios - 只允许在一段时间内触发一个 touchesMoved 方法?

转载 作者:行者123 更新时间:2023-11-29 13:11:47 31 4
gpt4 key购买 nike

我正在使用带有坐标系的 touchesMoved 来检测和响应屏幕特定区域内的用户触摸。例如,如果我有一个虚拟键盘并且用户在键上滑动,它会读取坐标并响应:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch * touch = [[event allTouches] anyObject];
CGPoint point = [touch locationInView:touch.view];
if(point.y < 333 && point.y > 166 && point.x < 90 && point.x > 20)
{
//do something
}
}

...但是,问题是,如果用户慢慢地拖过按键,或者按键之间的边界,该方法会连续触发多次,弹奏钢琴键声音时断断续续。

如何防止这种口吃?我认为在每次连续的 if 语句触发之间设置 0.25 秒的最小延迟会有所帮助。此外,此延迟仅适用于特定的 if 语句——我希望用户能够快速拖动按键并尽可能快地触发不同按键的 if 语句。

有人知道如何编写这样的代码吗?

最佳答案

试试这个:

BOOL _justPressed; // Declare this in your @interface

...

- (void)unsetJustPressed {
_justPressed = NO;
}

然后,在您的 touchesMoved 中:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
if (_justPressed) {
// A key was just pressed, so do nothing.
return;
}
else {
_justPressed = YES;

// Do stuff here

[self performSelector:@selector(unsetJustPressed)
withObject:nil
afterDelay:0.25];
}
}

这样,您可以将变量 _justPressed 设置为 YES 每次 touchesMoved:withEvent: 被调用(或在其中的特定条件下,取决于你想做什么),然后你使用 performSelector:withObject:afterDelay: 在一定时间后将 _justPressed 设置为 NO,因此,当 touchesMoved: 被调用时,您可以检查 _justPressed 是否为 YES 以确定它最近是否被调用。

请记住,您不必像上面的示例那样从方法中返回,您可以简单地使用 _justPressed 来检查是否应该播放声音,但仍然执行其他操作。该示例只是为了让您了解该怎么做。

关于ios - 只允许在一段时间内触发一个 touchesMoved 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17120036/

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