2013-01-24 8 views
5

Ich benutze Schwenkgeste, um ein Bild in CALayer zu verschieben. Das Problem, das ich erfahre, ist, dass das Bild sich mit einer kleinen Verzögerung zu bewegen scheint und nicht an meinem Finger "hängt".Verzögerung beim Verschieben von CALayer mit Schwenkgeste

Hier ist die tatsächliche Snippet, wie ich die Schicht bewegen (facePic ist die CALayer):

CGPoint translation =[touche locationInView:self.view]; 
self.facePic.frame = 
CGRectMake(translation.x - self.facePic.frame.size.width/2, 
      translation.y - self.facePic.frame.size.height/2, 
      self.facePic.frame.size.width, 
      self.facePic.frame.size.height); 
+0

Können Sie ein Beispiel für das Ziehen in einer anderen App finden, bei der es keine kleine Verzögerung gibt? Es gibt normalerweise etwas Verzögerung. – occulus

+0

@occulus sind Sie sicher, dass es keine Möglichkeit gibt, es besser zu machen? Ich habe auch versucht, UIView von der Unterklasse zu entfernen und die Ebene zu verschieben, indem ich die Methode touchesMoved außer Kraft setzte, aber das hatte den gleichen Effekt, der mir etwas seltsam vorkommt. –

Antwort

9

Ich denke, das Ergebnis von impliziten Animation einer Schicht zu sehen. Wenn ja, dann zwei Möglichkeiten gibt es diese Animation zu deaktivieren:

  1. Verwendung Transaktionen
  2. Satz Schicht Aktionen

Transaktionen verwenden wickeln Sie Ihren Code mit CATransaction

[CATransaction begin]; 
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions]; 
. . . 
[CATransaction commit]; 

einige deaktivieren Layer-Aktionen können Sie dies zum Layer-Init hinzufügen, zum Beispiel die Positionsanimation:

aLayer.actions = @{@"position":[NSNull null]}; // FIXED property name 
+1

Ich denke du meinst "implizite Animation". Es ist auch kürzer zu sagen "[CATtransaction setDisableActions: YES]". –

+1

Auch sollte es 'aLayer.actions = ...' sein. Der Name der Eigenschaft lautet 'actions', nicht' action'. –

+0

@robmayoff Sie haben absolut recht – voromax

Verwandte Themen