2016-05-14 54 views
0

我试图以圆形方式围绕矩形创建点。 为此,我创建了一个椭圆UIBezierPath,创建了一个CAKeyFrameAnimation并为keyPath'position'设置路径。CAKeyFrameAnimation在使用CGPath时没有动画效果

我设置了一个项目来试验动画并获得了很好的效果。 问题是,当我将代码添加到我的应用程序中时,点不是动画。 我试图添加相同的代码到其他应用程序,它工作得很好。它不适用于那一个应用程序。

奇怪的是,如果我通过包含CGPoint的值的数组替换路径,那么点动画。它只是不适用于CGPath的特定应用程序。

是否有隐藏的设置某处阻止CAKeyFrameAnimation使用CGPath? 还有另一种方法可以做到吗?使用值不像曲线那样曲线很好。

这里是我以前没有什么帮助的代码:

CAKeyframeAnimation *orbit = [CAKeyframeAnimation animation]; 
orbit.keyPath = @"position"; 
orbit.path = [self foregroundArcPath].CGPath; 
orbit.duration = 0.7f; 
orbit.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]; 
orbit.repeatCount = HUGE_VALF; 
orbit.calculationMode = kCAAnimationPaced; 
[self.foregroundDot addAnimation:orbit forKey:@"orbit"]; 

就像我说的,此代码的工作,只是没有在这一个应用程序。 这是我在这里的第一篇文章,对不起,如果它配制不好。

回答

0

也许foregroundArcPath是零还是空路径?

我很抱歉给出一个小细节的答案。我会刚刚发表评论,但我还没有能够做到这一点。

+0

路径很好,我验证了很多次。我甚至尝试过其他路径和其他图层。另外,当我将其添加到其他项目时,该代码也可以工作看起来问题在于这个项目。某些东西必须关闭路径上的层动画,或者它是Apple的错误,我真的不知道。 –

+0

这看起来很奇怪,如果没有经过该项目的其余代码,就很难指出问题所在,否则就会出现bug。我唯一能想到的其他问题是foregroundDot是否支持视图?因为那么你需要在动画块内部调用它来工作。如果它只是一个独立的层,那么我不知道。 – dunkmann00

+0

foregroundDot是一个CAShapeLayer,作为我在屏幕上显示的视图的子图层添加。动画的子层的位置应该没问题。正如你所看到的,无论如何它都是在动画块中调用的。 –

0

我遇到了和你一样的问题。也许你的项目导入了一些NSObject覆盖类,比如RMMapper。

-(instancetype)copyWithZone:(NSZone *)zone { 
     typeof(self) copiedObj = [[[self class] allocWithZone:zone] init]; 

CGPath不适合复制区域。

希望这篇技巧能帮助你。

相关问题