gpt4 book ai didi

ios - touchesEnded 偶尔不被调用

转载 作者:行者123 更新时间:2023-11-28 17:36:41 27 4
gpt4 key购买 nike

我在我的 UIView 中实现了以下事件处理程序:

- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
self.multipleTouchEnabled = YES;
}
return self;
}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
NSArray* touchObjects = [[event allTouches] allObjects];
for(int i=0; i<[touchObjects count]; i++)
{
touch = (UITouch*)[touchObjects objectAtIndex:i];
curPoint = [touch locationInView:self];
NSLog([NSString stringWithFormat:@"begin = %f,%f",curPoint.x,curPoint.y]);
}
}

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
CGPoint curPoint;
for (UITouch *touch in touches)
{
curPoint = [touch locationInView:self];
NSLog([NSString stringWithFormat:@"ended = %f,%f",curPoint.x,curPoint.y]);
}
}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
//logging touches
}

-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
//logging touches
}

问题是我偶尔收不到“touchesEnded”(或touchesCancelled)事件。我总是收到“touchesBegan”和“touchedMoved”事件。

我已经登录了这些方法,所以我 100% 确定我偶尔没有收到我期待的“touchesEnded”(或 touchesCancelled)事件。

多点触控已启用。

有人知道为什么会这样吗?当我使用这些事件删除 subview 时,收到这些事件非常重要。

有解决办法吗?是否可以查询当前触摸的 View (或窗口)?

最佳答案

您的 touchesBegan:withEvent: 方法不正确。它是这样说的:

NSArray* touchObjects = [[event allTouches] allObjects];

问题是 [event allTouches] 返回所有触摸,而不仅仅是开始阶段的触摸。因此,当第一个手指触摸屏幕时,您将记录一条 begin = %f,%f 消息。然后,当第二根手指触摸屏幕时,您将记录两条 begin = %f,%f 消息,其中一条是针对您之前看到的触摸。

您的 touchesEnded:withEvent: 方法正确地枚举了 touches 参数,它只包含结束阶段的触摸。因此,对于双指触摸,您将记录三个“开始”消息,但只会记录两个“结束”消息。

我不知道有什么方法可以在触摸处理方法之外请求当前触摸。

关于ios - touchesEnded 偶尔不被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9644627/

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