2013-01-24 29 views
5

Görüntüyü CALayer'da taşımak için pan hareketini kullanıyorum. Yaşadığım konu, görüntünün biraz gecikme ile hareket ettiği ve parmağımın 'sıkışmış' görünmemesidir.CALayer pan hareketi ile hareket ederken gecikme

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üçük bir gecikme olmayan başka bir uygulamada sürükleme örneği bulabilir misiniz? Genellikle biraz gecikme olur. – occulus

+0

@occulus Daha iyi hale getirmenin bir yolu olmadığından emin misin? Ayrıca UIView alt sınıfını denedim ve layerMoved yöntemini geçersiz kılarak katmanı hareket ettirdim ama aynı etkiyi benim için biraz tuhaf bir şekilde gerçekleştirdim. –

cevap

9

Sana bir tabakanın örtük animasyon sonucunu görmek düşünüyorum:

Burada katmanı nasıl hareket fiili pasajı (facePic CALayer olduğu) 'dir. böylece daha sonra bu animasyon devre dışı bırakmak için iki seçenek varsa:

  1. kullanım işlemleri
  2. set katman eylemler

kullanmak için

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

bazı devre dışı bırakmak için işlemler CATransaction ile kodunuzu sarın Katman eylemleri bunu katman initine ekleyebilir, konum animasyonu örneğin:

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

Sanırım “örtülü animasyon” demek istiyorsun. Ayrıca, '[CATransaction setDisableActions: YES]' dır. –

+1

Ayrıca, aLayer.actions = ... 'olmalıdır. Özellik adı "eylem", eylem değil. –

+0

@ robmayoff kesinlikle haklısınız – voromax