Переход UIPageViewController убивает анимацию CAShapeLayer за пределы второго viewcontroller - PullRequest
0 голосов
/ 07 мая 2019

У меня есть серия сцен в раскадровке, в которой есть CAShapeLayers, сгенерированные SVGKit из простых файлов SVG, которые я написал.Каждая сцена имеет UIViewController, который имеет переменную экземпляра, которая выбирает файл и устанавливает некоторые значения в SVG и применяет анимацию к CALayer для круга, который указывает, что я хочу, чтобы пользователь сделал (извините, фоновое изображение не рендеритсяправильно в разметке):

svg image

У меня есть сцены в отдельной раскадровке и есть массив NSStrings, которые содержат идентификаторы каждого из контроллеров в UIPageViewController.Я могу перемещаться от одного контроллера к другому, и почти все работает, как и ожидалось, за исключением анимации пульсирующей кнопки в любом контроллере, кроме второго.На самом деле пульсирующая кнопка видна во время перехода;он исчезает, когда переход завершается: Ссылка на быстрый фильм

У меня есть пользовательское представление, которое обрабатывает представление пульсирующей кнопки:

@implementation AlarisSVGView
-(void) layoutSubviews {
    buttonImage = [SVGKImage imageNamed:@"buttons.svg"];
    buttonView = [[SVGKLayeredImageView alloc] initWithSVGKImage:buttonImage];
    [self addSubview: buttonView];
    buttonLayer =[[buttonView.image dictionaryOfLayers] valueForKey:activeButton];
    [buttonLayer addAnimation:glowAnim forKey:@"lineWidth"];
}

-(void) animateButton {
    [buttonLayer removeAllAnimations];
    [buttonLayer addAnimation:glowAnim forKey:@"lineWidth"];
}

Я попытался вызвать animateButton allманера путей:

  1. с задержкой
[self performSelector:@selector(animateButton) withObject:nil afterDelay:0.1];
Из ViewDidDisplay в контроллере представления
- (void)viewDidAppear {
    [_alarisView animateButton];
}
Из didFinishAnimating на странице ViewController
- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray<AlarisViewController *> *)previousViewControllers transitionCompleted:(BOOL)completed {
    if (completed) {
        AlarisViewController* myVC = (AlarisViewController*) pageViewController.viewControllers.firstObject;
        [myVC.alarisView animateButton];
    }
}

Первый и второй контроллеры не нуждаются в animateButton для отображения анимации, но ничего из того, что я пробовал, не вызовет показ любого контроллера, кроме # 2ButtonLayer, даже статически.Я посмотрел на [buttonLayer debugDescription], и было понятно, пульсирует ли кнопка или нет.Я посмотрел, есть ли делегат, который забит UIPageViewController.Я попытался добавить анимацию как на презентационный, так и на модельный слои.Я пробовал в симуляторе и на моем телефоне (iOS 12.2 для обоих).У меня кончается ум.Улики?

...