прикосновения закругленные иногда не называются - PullRequest
1 голос
/ 10 марта 2012

Я реализовал следующие обработчики событий в моем 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" (или touchedCancelled). Я всегда получаю события "touchesBegan" и "touchedMoved".

У меня есть методы входа в эти методы, поэтому я уверен на 100%, что иногда не получаю ожидаемых событий "touchesEnded" (или touchesCancelled).

MultiTouch включен.

Кто-нибудь знает, почему это происходит? Чрезвычайно важно, чтобы я получал эти события, поскольку я использую эти события для удаления подпредставления (ей).

Есть ли обходной путь для этого? Можно ли запросить представление (или окно) для текущих касаний?

Ответы [ 2 ]

0 голосов
/ 13 мая 2013

Вы думали использовать - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event вместо?

0 голосов
/ 10 марта 2012

Ваш touchesBegan:withEvent: метод неверен.Это говорит следующее:

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

Проблема в том, что [event allTouches] возвращает все касания, а не только касания в начальной фазе.Поэтому, когда первый палец коснется экрана, вы зарегистрируете одно сообщение begin = %f,%f.Затем, когда второй палец коснется экрана, вы запишете два begin = %f,%f сообщения, одно из которых относится к прикосновению, которое вы видели ранее.

Ваш touchesEnded:withEvent: метод правильноперечисляет только аргумент touches, который содержит только касания в завершающей фазе.Таким образом, для касания двумя пальцами вы будете регистрировать три сообщения «начало», но только два сообщения «конец».

Я не знаю ни одного способа запросить текущие касания за пределами обработки касанияметоды.

...