2014-12-26 22 views
20

ViewController.Swift'te bir noktadan diğerine animasyonlu bir kutu yapmayı başardım. Kutuyu kolayca döndürdüğünü düşündüm, bu yüzden kutu bir noktaya canlandırılacak ve ardından orijinal konumuna geri dönecek ve tekrar dönecektir. Nesneyi bir pozisyona taşımayı başardım ve "tamamla" da tekrar geri taşıdım, ama bu i döngü yapmaz. Bu nasıl başarılabilir?UIView.animateWithDuration hızlı döngü animasyonu

Ben bu işe yarayabilir diye düşündüm ama gerçekten bilmiyorum:

let boxmoves = [CGRect(x: 120, y: 220, width: 100, height: 100), CGRect(x: 120, y: 120, width: 100, height: 100)] 
for boxmove in boxmoves { 
    coloredSquare.frame = boxmove 
} 

nasıl cihaz genişliğine göre ortalamak olabilir (ben dahil bazı matematik vardır varsayıyorum?)?

Kodum:

let coloredSquare = UIView() 

coloredSquare.backgroundColor = UIColor.blueColor() 

coloredSquare.frame = CGRect(x: 120, y: 120, width: 100, height: 100) 

self.view.addSubview(coloredSquare) 

// found repeate but this will not animate as I want. 
//UIView.animateWithDuration(2.0, delay: 0.2, options: UIViewAnimationOptions.Repeat, animations: { 
UIView.animateWithDuration(2.0, animations: { 

    coloredSquare.frame = CGRect(x: 120, y: 220, width: 100, height: 100) 

    }, completion: { finished in 
     UIView.animateWithDuration(2.0, animations: { 
     coloredSquare.frame = CGRect(x: 120, y: 120, width: 100, height: 100) 
     }) 
}) 

cevap

66

sadece animasyon seçenekleri argümanını kullanın tamamlama blok yaklaşımını yapmak gerek yok:

UIView.animate(withDuration: 2.0, delay: 0, options: [.repeat, .autoreverse], animations: { 

    coloredSquare.frame = CGRect(x: 120, y: 220, width: 100, height: 100) 

}, completion: nil) 

Swift 3.0 için güncellenmiş herhangi olursa Animasyonu daha sonra durdurmak istediğinizde, sadece şunu kullanın:

coloredSquare.layer.removeAllAnimations() 
+0

Vay, bu kadar kolaydı. Teşekkürler @Mazyod! Cihaz genişliğine göre nasıl merkezleneceğini biliyor musunuz? –

+1

@JohanNdiyoLinnarsson Peki, tüm bu sabit kodlanmış değerleri kaldırmanız gerekir. Çerçeveyi istediğiniz boyuta ayarlamayı deneyin, ardından çerçeve yerine 'colorSquare.center' özelliğini canlandırın. Görünümde ortalamak için, 'coloredSquare.center = view.center' veya daha iyisi' coloredSquare.center = CGPoint (x: view.bounds.midX, y: view.bounds.midY) 'dır, – Mazyod

+0

autolayout kullanarak "autoresizingMask" özelliğini esnek kenar boşluklarına ayarlamanız gerekir. – Mazyod