我在情节提要中有一系列场景,这些情节中有由我编写的简单SVG文件由SVGKit生成的CAShapeLayers。每个场景都有一个UIViewController,该UIViewController具有一个实例变量,该实例变量选择文件并在SVG中设置一些值,并将动画应用于CALayer以显示一个圆圈,该圆圈指示我希望用户执行的操作(对不起,背景图像无法渲染正确地在标记中):
我将场景放置在单独的情节提要中,并具有一个NSString数组,其中包含UIPageViewController中每个控制器的ID。我可以从一个控制器滑动到下一个控制器,几乎所有功能都能按预期工作,除了第二个控制器以外的任何控制器中的脉冲按钮动画。实际上,在转换过程中可以看到脉冲按钮。过渡完成后,它会消失: Link to quicktime movie
我有一个自定义视图,可以显示脉冲按钮:
@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:
[self performSelector:@selector(animateButton) withObject:nil afterDelay:0.1];
- (void)viewDidAppear {
[_alarisView animateButton];
}
- (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来显示动画,但是我尝试过的任何操作都不会导致#2以外的任何控制器显示buttonLayer,甚至是静态显示。 我看过[buttonLayer debugDescription],无论按钮是否跳动,它都是一致的。我看过是否有一个委托被UIPageViewController破坏了。我尝试将动画添加到表示层和模型层。我已经在模拟器和手机中都尝试过(两者均适用于iOS 12.2)。我快用完了。线索?