CALayer, anchorPoint и иерархия слоев - PullRequest
3 голосов
/ 19 июля 2010

Я пытаюсь использовать 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];

// ...
...