为什么在 viewDidAppear 中调用我的 CABasicAnimation 不起作用?

2023-12-25

In viewDidAppear我调用以下代码:

MyView *myView = [[MyView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
myView.backgroundColor = [UIColor clearColor];

[self.view addSubview:myView];

[myView setProgress:0.3 animated:YES];

最后一行调用此方法:

- (void)setProgress:(CGFloat)progress animated:(BOOL)animated {
    self.innerPie.hidden = NO;

    self.innerPie.strokeEnd = progress;

    CABasicAnimation *pathAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
    pathAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
    pathAnimation.duration = 3.0;
    pathAnimation.fromValue = [NSNumber numberWithFloat:self.progress];
    pathAnimation.toValue = [NSNumber numberWithFloat:progress];
    [self.innerPie addAnimation:pathAnimation forKey:@"strokeEndAnimation"];

    self.progress = progress;
}

还是动画never当我加载模拟器时启动。为什么?正如所示,视图还没有出现吗?

奇怪的是,如果我使用dispatch_after0秒延迟(即时)will show.

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    [myView setProgress:0.8 animated:YES];
});

我究竟做错了什么?


你的解决方案(延迟性能)非常好,所以确实没有问题。唯一的问题是为什么您的代码在没有延迟性能的情况下无法工作。我怀疑这与这些行有关:

[self.view addSubview:myView];
[myView setProgress:0.3 animated:YES];

您已命令将 MyView 添加到界面中,但显然它还没有really尚未添加,至少不是以这样的方式添加:界面已经稳定下来,我们准备向图层渲染树添加动画。您的延迟性能完全满足了需要:我们等待运行循环的一个周期,现在界面(包括添加的 MyView)已准备好运行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么在 viewDidAppear 中调用我的 CABasicAnimation 不起作用? 的相关文章

随机推荐