2013-01-24 11 views
5

Uso il movimento di panoramica per spostare un'immagine in CALayer. Il problema che ho riscontrato è che l'immagine sembra muoversi con un leggero ritardo e non sembra "bloccata" al mio dito.Ritardo durante lo spostamento di CALayer con gesto di panoramica

Ecco il frammento di reale di come mi muovo lo strato (facePic è il 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

Riesci a trovare un esempio di trascinamento in un'altra app dove non c'è un piccolo ritardo? Di solito c'è un po 'di ritardo. – occulus

+0

@occulus sei sicuro che non ci sia modo di renderlo migliore? Ho anche provato a suddividere UIView e spostare il livello ignorando il metodo touchesMoved ma questo ha lo stesso effetto che è un po 'strano per me. –

risposta

9

Penso che si vede il risultato di implicita l'animazione di un livello. Se è così allora ci sono due opzioni per disattivare questa animazione:

  1. uso transazioni
  2. azioni set di livelli

Per utilizzare le transazioni avvolgono il codice con CATransaction

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

Per disabilitare alcune azioni di livello è possibile aggiungere questo al livello init, l'animazione di posizione ad esempio:

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

Penso che tu intenda "animazione implicita". Inoltre, è più breve dire '[CATransaction setDisableActions: YES]'. –

+1

Inoltre, dovrebbe essere "aLayer.actions = ...". Il nome della proprietà è 'actions', non' action'. –

+0

@robmayoff hai assolutamente ragione – voromax

Problemi correlati