gpt4 book ai didi

ios - 为什么 CALayer 动画会在加载 View 后工作,而不是在初始化后才工作?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:46:37 27 4
gpt4 key购买 nike

我有一个自定义 View (一个从 UIView 派生的带有旋转动画的小指示器),它基本上在中间有一个心形图标 (UIImageView) 和几个球 (另一个 UIImageView) 使用图层动画围绕它旋转。这是我的代码:

-(void)performInitialization{
self.backgroundColor = [UIColor clearColor];
CGRect frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
UIImageView *imageView = [[UIImageView alloc] initWithFrame:frame];
[imageView setImage:[UIImage imageNamed:@"RedHeart"]];
balls = [[UIImageView alloc] initWithFrame:frame];
[balls setImage:[UIImage imageNamed:@"AngularBalls"]];
[self addSubview:imageView];
[self addSubview:balls];

[balls.layer beginRotating];
}

...我在 CALayer 上的类别有:

-(void)beginRotatingWithAngularVelocity:(float)velocity{
CABasicAnimation *rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
rotationAnimation.fillMode = kCAFillModeForwards;
rotationAnimation.removedOnCompletion = YES;
rotationAnimation.repeatCount = 999999;
rotationAnimation.duration = velocity;
rotationAnimation.cumulative = YES;
rotationAnimation.fromValue = [NSNumber numberWithFloat:0];
rotationAnimation.toValue = [NSNumber numberWithFloat:M_PI * 2];
[self addAnimation:rotationAnimation forKey:ROTATION_KEY];
}

-(void)beginRotating{
[self beginRotatingWithAngularVelocity:0.7];
}

performInitialization 在我的 View 的 init[WithFrame|WithCoder] 方法中被调用。我的 Storyboard 的主视图中有这些 View 之一,并且该 View 的动画非常完美。如果我将我的自定义 View 的多个实例放入该主视图中,它们也会完美地动画化。如果我将我的观点放入该 Storyboard上的任何 View ,那没有问题。但是,当我将相同的 View 放入 Nib 的 View 中时,它不会设置动画。相同的代码,IB 中的相同设置(复制粘贴以确保一切相同),但 View 仍然停留在初始 View 上,就好像图层上没有附加动画一样)。为什么会这样?我怎样才能使动画在 Nib 上工作?

更新:问题似乎与在 View 的初始化程序中设置动画有关。在某些情况下,我会在初始化内部进行动画处理,但有时会在加载后进行动画处理(例如,用户单击某些内容并且正在下载某些内容)。该问题似乎与前一种情况一致。我之前关于 Storyboard与 Nib 的谬误显然只是巧合。我相应地更新了标题。

最佳答案

初始化太早。您需要等到 View 出现在您的界面中(通过 didMoveToWindow 向 View 发出信号。在此之前, View 不是渲染树的一部分(这是其层的绘图/动画的作用).

关于ios - 为什么 CALayer 动画会在加载 View 后工作,而不是在初始化后才工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22053668/

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