gpt4 book ai didi

iPhone - 忽略某个区域的第二次触摸

转载 作者:行者123 更新时间:2023-12-03 19:45:07 24 4
gpt4 key购买 nike

我认为允许用户进行手指绘画。如果用一根手指触摸该区域,则代码可以完美运行。例如:我用一根手指触摸它并移动手指。然后,当我移动第一根手指时,就会画出一条线。如果我用第二根手指触摸相同的 View ,则第一根手指绘制的线就会停止。

我想忽略第一次之外的任何触摸,即跟踪第一次触摸,但忽略同一 View 的所有其他触摸。

我正在使用touchesBegan/moved/ending。

我用它来检测触摸

UITouch *touch = [[event allTouches] anyObject];
lastPoint = [touch locationInView:myView];

这个我也试过

lastPoint = [[touches anyObject] locationInView:myView];

但什么都没有改变。

我该如何做到这一点 - 跟踪第一次触摸并忽略对 View 的任何后续触摸?

谢谢。

注意:不会调整 View 来检测多个触摸。

最佳答案

只要与屏幕接触,给定的触摸就会保持相同的内存地址。这意味着您可以将地址保存为实例变量并忽略来自其他对象的任何事件。但是,不要保留触摸。如果这样做,系统将使用不同的地址,并且您的代码将无法工作。

示例:

currentTouch 添加到您的界面:

@interface MyView : UIView {
UITouch *currentTouch;
...
}
...
@end

修改 touchesBegan: 以忽略触摸(如果已被跟踪):

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
if(currentTouch) return;
currentTouch = [touches anyObject];
...
}

修改 touchesMoved: 以使用 currentTouch 而不是从集合中获取触摸:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
if(!currentTouch) return;
CGPoint currentPoint = [currentTouch locationInView:myView];
...
}

修改 touchesEnded:touchesCancelled: 以清除 currentTouch,但前提是 currentTouch 已结束或被取消.

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
if(currentTouch && currentTouch.phase == UITouchPhaseEnded) {
...
currentTouch = nil;
}
}
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
if(currentTouch && currentTouch.phase == UITouchPhaseCancelled) {
...
currentTouch = nil;
}
}

关于iPhone - 忽略某个区域的第二次触摸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5968758/

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