2016-05-14 11 views
0

Ich versuche, einen Punkt um ein Rect kreisförmig zu animieren. Dafür habe ich einen ovalen UIBezierPath erstellt, eine CAKeyFrameAnimation erstellt und den Pfad für keyPath 'position' festgelegt.CAKeyFrameAnimation animiert nicht, wenn CGPath verwendet wird

Ich habe ein Projekt eingerichtet, um mit Animationen zu experimentieren und etwas gut funktionieren zu lassen. Das Problem ist, wenn ich den Code zu meiner App hinzufügen, ist der Punkt nicht animiert. Ich habe versucht, denselben Code zu anderen Anwendungen hinzuzufügen, und es funktioniert gut. Es funktioniert nicht nur für diese eine App.

Die seltsame Sache ist, dass, wenn ich den Pfad durch ein Array von Wert, der CGPoint enthält, den Punkt animiert. Es funktioniert einfach nicht für CGPath für diese spezifische App.

Gibt es irgendwo eine versteckte Einstellung, die CAKeyFrameAnimation mit CGPath blockiert? Gibt es einen anderen Weg, es zu tun? Bei Verwendung von Werten verläuft die Kurve nicht wie bei einem Pfad. Hier

ist der Code, den ich verwenden, wenn das hilft:

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"]; 

Wie gesagt, dieser Code funktioniert, nur nicht in diesem App. Es ist mein erster Beitrag hier, tut mir leid, wenn es schlecht formuliert ist.

Antwort

0

Vielleicht VordergrundArcPath ist Null oder ein leerer Pfad?

Ich entschuldige mich für eine Antwort mit wenig Details. Ich hätte nur kommentiert, aber das kann ich noch nicht.

+0

Der Weg ist in Ordnung, ich habe es mehrmals verifiziert. Ich habe sogar andere Wege und andere Schichten ausprobiert. Außerdem funktioniert dieser Code, wenn ich ihn zu anderen Projekten hinzufüge. Es scheint, als wäre das Problem bei diesem einen Projekt. Irgendetwas muss Ebenenanimationen um einen Pfad ausgeschaltet haben, oder es ist ein Apple-Bug, ich weiß es wirklich nicht. –

+0

Das scheint merkwürdig, ohne den Rest des Codes in diesem Projekt durchzugehen, wäre es schwierig, das Problem oder den Bug genau anzugeben, wenn das der Fall ist. Die einzige andere Sache, an die ich denken könnte, ist, ob foregroundDot eine Ebene ist, die eine Ansicht unterstützt. Denn dann müssten Sie das in einem Animationsblock aufrufen, damit es funktioniert. Wenn es nur eine eigenständige Ebene ist, weiß ich nicht. – dunkmann00

+0

foregroundDot ist ein CAShapeLayer, den ich als Sublayer einer Ansicht hinzugefügt habe, die ich auf dem Bildschirm anzeige. Das Animieren der Position dieser Unterschicht sollte in Ordnung sein. Und wie Sie sehen können, wird es sowieso in einem Animationsblock aufgerufen. –

0

Ich stoße genau auf Problem wie Sie. Vielleicht importiert Ihr Projekt eine NSObject-Überschreibungsklasse wie RMMapper.

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

CGPath ist nicht für die Kopierzone geeignet.

In der Hoffnung, dieser Tipp wird Ihnen helfen.