У меня есть UIView, в котором 2 CALayers добавляют [self.layer addSublayer:subLayerA]; //...
дают следующую иерархию вида:Почему моя Трассировка в UIView не идентифицирующий CALayer прикоснулся
UIView subclass
- backing layer (provided by UIView)
- subLayerA
- subLayerB
Если я переопределить touchesBegan
в контроллере представления что представляет UIView его правильно идентифицирует CALayer прикоснулся:
// in view controller
#import <QuartzCore/QuartzCore.h>
//.....
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CGPoint touchPoint = [touch locationInView:self.view];
CALayer *touchedLayer = [self.view.layer.presentationLayer hitTest:touchPoint]; // returns a copy of touchedLayer
CALayer *actualLayer = [touchedLayer modelLayer]; // returns the actual CALayer touched
NSLog (@"touchPoint: %@", NSStringFromCGPoint(touchPoint));
NSLog (@"touchedLayer: %@", touchedLayer);
NSLog (@"actualLayer: %@", actualLayer);
}
Однако, если переопределить touchesBegan
в UIView которой защитный слой является родителем двух подслоев, он будет возвращать null
для CALayer (хотя дает правильный TouchPoint):
// in UIView subclass
#import <QuartzCore/QuartzCore.h>
//.....
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CGPoint touchPoint = [touch locationInView:self];
CALayer *touchedLayer = [self.layer.presentationLayer hitTest:touchPoint]; // returns a copy of touchedLayer
CALayer *actualLayer = [touchedLayer modelLayer]; // returns the actual CALayer touched
NSLog (@"touchPoint: %@", NSStringFromCGPoint(touchPoint));
NSLog (@"touchedLayer: %@", touchedLayer);
NSLog (@"actualLayer: %@", actualLayer);
}
Любые идеи где я ошибаюсь?
Это такая ежу понятно и имеет полный смысл. A +. Я бы купил тебе пиво, если бы мог. –