У меня есть несколько сложное требование к макету нескольких слоев Core Animation. По сути, у меня есть два слоя с содержимым CGImage, которые необходимо изменить в размере (сохранив соотношение сторон), но при этом они располагаются рядом друг с другом в середине родительского слоя. Я проиллюстрировал это ниже.
(На обеих моих иллюстрациях показаны границы содержимого изображения слоя A и слоя B. Не имеет значения, если размер самого слоя больше.)

Самое близкое, что я сделал до сих пор, используя CAConstraintLayoutManager, — это правильно масштабировать их, но центрировать в своей половине суперслоя (ниже).

Я довожу их до этого момента с помощью кода ниже:
layerA.contentsGravity = kCAGravityResizeAspect;
[layerA setConstraints:[NSArray arrayWithObjects:
[CAConstraint constraintWithAttribute:kCAConstraintMinX relativeTo:@"superlayer" attribute:kCAConstraintMinX],
[CAConstraint constraintWithAttribute:kCAConstraintMaxX relativeTo:@"superlayer" kcaConstraintMidX],
[CAConstraint constraintWithAttribute:kCAConstraintMinY relativeTo:@"superlayer" attribute:kCAConstraintMinY],
[CAConstraint constraintWithAttribute:kCAConstraintMaxY relativeTo:@"superlayer" attribute:kCAConstraintMaxY],
nil]];
layerB.contentsGravity = kCAGravityResizeAspect;
[layerB setConstraints:[NSArray arrayWithObjects:
[CAConstraint constraintWithAttribute:kCAConstraintMinX relativeTo:@"superlayer" attribute:kCAConstraintMidX],
[CAConstraint constraintWithAttribute:kCAConstraintMaxX relativeTo:@"superlayer" kcaConstraintMaxX],
[CAConstraint constraintWithAttribute:kCAConstraintMinY relativeTo:@"superlayer" attribute:kCAConstraintMinY],
[CAConstraint constraintWithAttribute:kCAConstraintMaxY relativeTo:@"superlayer" attribute:kCAConstraintMaxY],
nil]];
Как вы можете изменить размер двух слоев, а также выровнять их?
Одна идея, которая пришла мне в голову, заключалась в том, чтобы создать слой, содержащий A и B, выложенный правильно, без полей по краям, а затем масштабировать его. Я тоже не могу придумать, как это сделать.