2013-01-24 5 views
5

Używam gestu panoramowania, aby przesunąć obraz w KALKULATORZE. Kwestia, której doświadczam, polega na tym, że obraz wydaje się poruszać z niewielkim opóźnieniem i nie pojawia się "przyklejony" do mojego palca.Opóźnienie podczas przenoszenia CALayer z gestem przesunięcia

Oto rzeczywisty fragment jak przenieść warstwę (facePic jest 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

Czy można znaleźć przykład przeciągania w innej aplikacji, w której nie ma niewielkiego opóźnienia? Zwykle jest pewne opóźnienie. – occulus

+0

@occulus jesteś pewien, że nie ma sposobu, aby to poprawić? Próbowałem również podklasować UIView i przenieść warstwę przez przesłonięcie metody touchesMoved, ale która miała ten sam efekt, który jest dla mnie trochę dziwny. –

Odpowiedz

9

myślę widać wynik niejawny animacji warstwy. Jeśli tak, to istnieją dwie możliwości, aby wyłączyć tę animację:

  1. wykorzystywać transakcje
  2. działań określonych warstw

Aby korzystać transakcje owinąć kod z CATransaction

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

Aby wyłączyć niektóre operacje warstw można dodać do init warstwy, animacja położenia, na przykład:

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

Myślę, że masz na myśli "ukrytą animację". Ponadto krótsza jest odpowiedź "[CATransaction setDisableActions: YES]". –

+1

Powinien też być "aLayer.actions = ...". Nazwa właściwości to 'actions', a nie' action'. –

+0

@robmayoff masz absolutną rację – voromax