gpt4 book ai didi

ios - 为什么调用我的 CABasicAnimation 在 vi​​ewDidAppear 中不起作用?

转载 作者:可可西里 更新时间:2023-11-01 05:41:11 24 4
gpt4 key购买 nike

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;
}

然而,当我加载模拟器时,动画从未开始。为什么?如图所示, View 是否已经出现?

奇怪的是,如果我使用具有 0 秒延迟(即时)的 dispatch_after,它显示。

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 添加到界面中,但显然它还没有真正被添加,至少没有以界面已经稳定下来并且我们准备好了的方式将动画添加到图层渲染树。您的延迟性能完全满足了我们的需要:我们等待运行循环的一个周期,现在界面(包括添加的 MyView)已准备就绪。

关于ios - 为什么调用我的 CABasicAnimation 在 vi​​ewDidAppear 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22446722/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com