Как вы анимируете подслои слоя UIView во время анимации UIView?

В анимации UIView для представления вы можете анимировать егоподвиды выкладывается в том числеUIViewAnimationOptionLayoutSubviews в параметре параметров[UIView animateWithDuration:delay:options:animations:completion:], Тем не менее, я не могу найти способ оживить его, выкладывая егоподуровни когда они не являются задним слоем какого-либо вида; они просто запрыгивают на место, чтобы соответствовать новым границам вида. Поскольку я работаю со слоями, а не с представлениями, мне кажется, что я должен использовать Core Animation вместо анимации UIView, но я не знаю, как (и когда) сделать это так, чтобы анимация слоев соответствовала представлению анимация.

Это мой основной вопрос. Читайте больше, если вы хотите узнать конкретную вещь, которую я пытаюсь выполнить.

Я создал представление с пунктирной границей, добавив CAShapeLayer к слою представления (см. Этот вопрос stackoverflow:Пунктирная линия границы вокруг UIView). Я корректирую путь CAShapeLayer, чтобы соответствовать границам вида вlayoutSubviews.

Это работает, но есть одна косметическая проблема: когда границы представления анимированы в анимации UIView (как во время вращения), пунктирная граница переходит к новым границам представления вместо плавной анимации, когда представление анимирует свои границы. Таким образом, правая и нижняя части пунктирной границы соответственно не остаются прижатыми к правой и нижней частям вида при анимации вида.Как я могу получить пунктирную границу от CAShapeLayer для анимации вместе с видом, поскольку он анимирует свои границы?

То, что я делаю до сих пор, это присоединение CABasicAnimation к CAShapeLayer:

- (void)layoutSubviews
{
    [super layoutSubviews];

    self.borderLayer.path = [UIBezierPath bezierPathWithRect:self.bounds].CGPath;
    self.borderLayer.frame = self.bounds;

    CABasicAnimation *pathAnimation = [CABasicAnimation animationWithKeyPath:@"path"];
    [self.borderLayer addAnimation:pathAnimation forKey:nil];
}

Это приводит к тому, что пунктирная граница анимируется, но у нее нет правильной функции синхронизации и продолжительности анимации, соответствующих анимации вида. Кроме того, иногда мы не хотим, чтобы пунктирная граница анимировалась, например, когда представление сначала создает макет, граница не должна анимироваться от какого-то старого пути к новому правильному пути; это должно просто появиться.

Ответы на вопрос(1)

Ваш ответ на вопрос