Есть ли hitTest: (CGPoint) в CAShapeLayer? - PullRequest
2 голосов
/ 16 декабря 2010

У меня есть несколько слоев CAShapeLayers в виде, и я хотел бы перетащить его (неправильная форма). Пожалуйста, дайте несколько советов для этого.

1 Ответ

0 голосов
/ 04 января 2011

CALayer и его подклассы не являются частью цепочки респондента и не спускаются с UIResponder. Следовательно, touchesBegan:withEvent: и т. Д. Никогда не будут вызываться ни на одном подклассе CALayer. Вам необходимо обнаружить прикосновение к одному из хостов UIView в иерархии слоев. Затем вы используете hitTest: в обработчиках касания, чтобы определить, какой слой был затронут.

Вам будет проще, если вы создадите подкласс UIView с CAShapeLayer в качестве заднего слоя следующим образом:

@implementation MyShapeView

- (CALayer *)layerClass {
  return [CAShapeLayer class];
}

@end

Затем добавьте экземпляры вашего пользовательского представления в качестве подпредставлений на ваш основной вид. После этого вы можете использовать методы UIResponder или, что еще лучше, UIGestureRecognizer для обработки перетаскивания. Я настоятельно рекомендую использовать распознаватели жестов, если вы можете использовать iOS 3.2 или выше. Они значительно упрощают обработку событий.

...