CALayer
и его подклассы не являются частью цепочки респондента и не спускаются с UIResponder
. Следовательно, touchesBegan:withEvent:
и т. Д. Никогда не будут вызываться ни на одном подклассе CALayer
. Вам необходимо обнаружить прикосновение к одному из хостов UIView
в иерархии слоев. Затем вы используете hitTest:
в обработчиках касания, чтобы определить, какой слой был затронут.
Вам будет проще, если вы создадите подкласс UIView
с CAShapeLayer
в качестве заднего слоя следующим образом:
@implementation MyShapeView
- (CALayer *)layerClass {
return [CAShapeLayer class];
}
@end
Затем добавьте экземпляры вашего пользовательского представления в качестве подпредставлений на ваш основной вид. После этого вы можете использовать методы UIResponder
или, что еще лучше, UIGestureRecognizer
для обработки перетаскивания. Я настоятельно рекомендую использовать распознаватели жестов, если вы можете использовать iOS 3.2 или выше. Они значительно упрощают обработку событий.