У меня есть UIView, который содержит несколько подклассов CALayer. Я использую следующий код, чтобы определить, какому слою соответствует событие касания:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CGPoint touchPoint = [touch locationInView:self];
NSLog(@"%@,%@",NSStringFromCGPoint(point),[self.layer hitTest:point].name);
}
Это работает нормально, пока устройство не будет повернуто. Когда устройство вращается, все текущие слои удаляются из суперслоя, и создаются новые слои CALay, чтобы соответствовать новой ориентации. Новые слои правильно вставлены и отображаются в правильной ориентации.
После поворота метод hitTest последовательно возвращает ноль для слоя. Я заметил, что при повороте на 180 градусов возвращенный слой - это то, что находилось в этом месте до поворота, то есть касание верхнего левого слоя дает слой в правом нижнем углу при повороте на 180 градусов. Координаты теста попадания печатаются, как ожидается, с (0,0) слева вверху. Я перерисовываю слои с каждым поворотом, но по какой-то причине они, кажется, отображаются как «правильный» путь вверх, с кнопкой «Домой» внизу. Я пропускаю вызов функции или что-то после обработки вращения?
Ура,
Адам