2016-04-01 19 views
1

moveToPosition() işlevi çağrıldığında, siyah nokta içeren katmam yeni bir konuma taşınmaya çalışıyorum. moveToPosition() fonksiyonu, her seferinde hesaplanan yeni bir konumla birçok kez hızlı bir şekilde çağrılır, böylece ideal olarak, noktanın yumuşak bir yoldan geçtiğini görürsünüz. How can I move an image in Swift? itibarenSwift'de bir iOS katmanının taşınması

func moveToPosition(newPosition: CGPoint) { 
    print (newPosition.x, newPosition.y, redLayer.position) 
    self.redLayer.position = newPosition 
} 

func moveToPosition(newPosition: CGPoint) { 
    print (newPosition.x, newPosition.y, redLayer.position) 

    var movement = CABasicAnimation(keyPath: "movement") 
    movement.fromValue = NSValue(CGPoint: self.redLayer.position) 
    movement.toValue = NSValue(CGPoint: toPoint) 
    movement.duration = 0.3 

    self.redLayer.addAnimation(movement, forKey: "position") 
    self.redLayer.position = toPoint 
} 

, ben de aşağıdaki kodu çalıştı:

func moveToPosition(newPosition: CGPoint) { 
    print (newPosition.x, newPosition.y, redLayer.position) 

    UIView.animateWithDuration(0.75, delay: 0, options: .CurveLinear, animations: { 
     self.redLayer.position = newPosition 
     }, completion: nil) 
} 

Ama bir katman bir UIView içindir ve olmadığı için belki de bu kod işe yaramadı Aşağıdaki denedim?

Her neyse, bunların hiçbiri işe yaramadı - print ifademden, newPosition.x ve newPosition.y öğelerinin her defasında değiştiğini görüyorum, ancak noktanın kendisi ekranda hareket etmiyor. Herhangi bir fikir? IOS için çok yeniyim, bu yüzden herhangi bir yardım takdir edilecektir!

+0

Ne tür bir nesne "redLayer"? – aramusss

+0

Kodunuzda hangi noktada moveToPosition'i arıyorsunuz? Bir CALayer'ın Konumunun örtülü bir animasyonu vardır, bu yüzden kendi CABasicAnimation'ı oluşturmanız gerekmez. CABasicAnimation'ınızın, "redLayer" öğesinin "hareket" özelliğini değiştirmeye çalıştığı ve eğer bir "Layer" özelliği taşıdığı bir CA Layer ise, bir "hareket" özelliğine sahip olmadığı (neye benzediğinize benziyor) gibi görünmüyor. CABasicAnimation (...) ve redLayer.addAnimation –

+0

redLayer.addAnimation 've' position 'girdiler redLayer bir CALayer() olduğunu. – tricer123

cevap

2

UIKit'teki her UIView örneğinin arkasındaki temel görsel nesne CALayer örneğidir. Bir görünüm katmanını taşıdığınızda veya canlandırdığınızda, görünümü değil, yalnızca görüntünün görsel temsilini hareket ettirmez. Animasyon tamamlandığında katman, görünümün gerçek çerçevesini (model) yansıtacak şekilde güncellenir.

iki şey yapabilirsiniz, bir görünümün katmanı taşımak için, sorunuzu yanıtlamak için:

  1. değiştirme sırayla katmanı güncelleyecek görünüm çerçevesi. Için örneğin .:

    UIView.animateWithDuration(0.5) { 
    
        movingView.frame = updatedFrame; 
    } 
    
  2. Güncelleme (CoreAnimation kullandığınız için ör.) Doğrudan katman ama sonunda, yeni konumu/çerçeve yansıtmak için görünümün modelini güncellemek.

This makale, örneğin, UIKit model/görünüşüdür ayrılmasını açıklar.