我有一个自定义视图(从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
在我的观点的init
[WithFrame|WithCoder
]方法中调用。我在故事板的主视图中有其中一个视图,视图完美地动画。如果我将自定义视图的多个实例放入该主视图中,它们也会完美地生成动画。如果我将视图放在该故事板上的任何视图中都没有问题。但是,当我将相同的视图放入笔尖的视图中时,它将不会生成动画。相同的代码,IB中的相同设置(复制粘贴以确保一切都相同),但视图仍然停留在初始视图上,好像没有动画附加到图层上)。为什么会这样?如何让这个动画在笔尖上工作?
更新:问题似乎与在视图的初始化程序上创建动画有关。在某些情况下,我在初始化内部动画,但有时,在加载后(例如用户点击某些内容并且正在下载内容)。问题似乎与前一种情况一致。我之前关于故事板和笔尖的谬论显然只是巧合。我已相应更新了标题。
答案 0 :(得分:4)
初始化太早了。您需要等到视图在界面中(通过didMoveToWindow
向视图发出信号。在此之前,视图不是渲染树的一部分(它的图层的绘制/动画是什么)。 / p>