Я пытаюсь использовать anchorPoint в иерархии слоев, чтобы переместить слой с его подуровнями. К сожалению, подслой не двигался вместе с корневым слоем. В пользовательском NSView настроена иерархия слоев, как в следующем фрагменте.
CALayer * rootLayer;
rootLayer = [[CALayer layer] retain];
rootLayer.position = CGPointMake(...);
[self.layer addSublayer:rootLayer];
subLayer = [[MapLayer layer] retain];
subLayer.position = CGPointMake(...);
[rootLayer addSublayer:baseLayer];
При обработке события мыши я хочу установить точку привязки rootLayer для перемещения всей иерархии слоев:
rootLayer.anchorPoint = CGPoint(0.7, 0.7);
Я ожидаю от этого вызова, что rootLayer перемещается вместе со своим subLayer, так что точка привязки находится в центре представления. Что происходит, так это то, что подслой не двигался. Только когда я звоню:
rootLayer.anchorPoint = CGPoint(0.7, 0.7);
subLayer.anchorPoint = CGPoint(0.7, 0.7);
слои ведут себя как положено.
Я думал, что установки точки привязки корневого слоя будет достаточно. Это используется в моем приложении Map для OS X. Там я настраиваю вид и использую anchorPoint для перемещения всей карты. При наличии только одного подслоя в пользовательском NSView приложение ведет себя как ожидалось.
Заранее спасибо.
ОБНОВЛЕНИЕ : После обсуждения с коллегой я установил границы корневого слоя, и теперь он работает.
CALayer * rootLayer;
rootLayer = [[CALayer layer] retain];
rootLayer.bounds = CGRectMake(0, 0, 256, 256);
rootLayer.position = CGPointMake(...);
[self.layer addSublayer:rootLayer];
// ...