Hoşgeldin. Soru sormak veya cevaplamak için hemen üye ol.

Swift'te Tekrarlanan Bir Animasyonu Nasıl Yapabilirim ?

0 oy
50 kez görüntülendi
8, Eylül, 2015 ios development kategorisinde burhanaksendir tarafından soruldu
Şu şekilde bir animasyon yapmak istiyorum:

Ekranda bir imageview var. Bunun içindeki resim 1 saniye göründükten sonra fade out oluyor ve imageview içindeki resim değişiyor. Gelen yeni resim de 2 saniye ekranda kalıyor ve sonra fadeout oluyor.

Bu  basit animasyon sürekli repeat olsun istiyorum. Bunu nasıl yapabilirim ? Çözemedim bir türlü. UIView.animateKeyframesWithDuration ile denedim olmadı.

1 cevap

+1 oy
9, Eylül, 2015 yasin tarafından cevaplandı
9, Eylül, 2015 burhanaksendir tarafından seçilmiş
 
En İyi Cevap

şöyle bir şey iş görür sanırım,

override func viewDidLoad() {
    super.viewDidLoad()

    let imageArray:[UIImage] = [UIImage(named: "Image1")!,UIImage(named: "Image2")!,UIImage(named: "Image3")!,UIImage(named: "Image4")!,UIImage(named: "Image5")!]

    let imageViewBounds:CGRect = CGRectMake(0.0, (self.view.frame.size.height - self.view.frame.size.width) / 2, self.view.frame.size.width, self.view.frame.size.width)
    var imageView:UIImageView = UIImageView(frame: imageViewBounds)
    imageView.backgroundColor = UIColor.redColor()
    imageView.image = imageArray[0]
    self.view.addSubview(imageView)

    crossDissolveImageTransitionAnimation(imageView, images:imageArray, imageIndex:1, fullShowDuration: 2.0, fullHideDuration:0.5, crossDissolveDuration: 2.0)


}

func crossDissolveImageTransitionAnimation(imageView:UIImageView, images:[UIImage], var imageIndex:Int, fullShowDuration:NSTimeInterval, fullHideDuration:NSTimeInterval, crossDissolveDuration:NSTimeInterval) {
    UIView.animateWithDuration(crossDissolveDuration / 2, delay: fullShowDuration, options: UIViewAnimationOptions.CurveEaseOut, animations: { () -> Void in
        imageView.alpha = 0
    }) { (Bool) -> Void in
        imageView.image = images[imageIndex]
        UIView.animateWithDuration(crossDissolveDuration / 2, delay: fullHideDuration, options: UIViewAnimationOptions.CurveEaseIn, animations: { () -> Void in
            imageView.alpha = 1
            }) { (Bool) -> Void in
                if imageIndex < images.count - 1 {
                    ++imageIndex
                } else {
                    imageIndex = 0
                }
                self.crossDissolveImageTransitionAnimation(imageView, images:images, imageIndex:imageIndex, fullShowDuration:fullShowDuration, fullHideDuration:fullHideDuration, crossDissolveDuration: crossDissolveDuration)
        }
    }
}
9, Eylül, 2015 burhanaksendir tarafından yorumlandı
Tam istediğim gibi. Gerçekten çok süper olmuş. Yardımlarınız için teşekkür ederim.
1, Ekim, 2015 burhanaksendir tarafından yorumlandı
Şöyle bir sorun gözlemliyorum. CPU kullanımı giderek artıyor ve %120'ye çıkıyor. Ama sorunu çözemedim.
1, Ekim, 2015 yasin tarafından yorumlandı
UIImage(named:) neden olabilir daha önce size nasıl cache'den image çağrılacağına dair bir örnek vermiştim yanlış hatırlamıyorsam. O örnekteki gibi bir yapı kurun.
ayrıca eğer bu sonuca simulator'de ulaşıyorsanız, yanıltıcı olabilir. gerçek bir cihazda test edin.
1, Ekim, 2015 burhanaksendir tarafından yorumlandı
Evet, o bahsettiğiniz cache ile oluşturdum image çağırmayı.  Ben uygulamamda, sizin crossDissolveImageTransitionAnimation fonksiyonunuzu viewWillAppear içerisinde çağırıyorum. Sonra diğer ViewController'e geçiş yapıp tekrar bu mainControllere gelince bahsettiğim şekilde aşırı CPU kullanımı oluşuyor. Normalde aynı VC'de kalınca sorun olmuyor. Bu VC'den çıkıp geri dönünce oluyor.
1, Ekim, 2015 yasin tarafından yorumlandı
e doğaldır. ViewWillAppear içinde çağırıyorsanız. aynı animasyon view controller her görüntülendiğinde yeniden oluşturuluyor demekki.
ya viewDidLoad'ı kullanın yada viewDidDisappear içerisinde viewController dismiss olurken animasyonu kaldırın.
1, Ekim, 2015 burhanaksendir tarafından yorumlandı
Teşekkür ederim. Peki genel anlamda, viewDidDisappear içinde şöyle mi kaldırmalıyım animasyonu bu örneğe göre:
self.view.layer.removeAllAnimations()
1, Ekim, 2015 yasin tarafından yorumlandı
evet, hatta bağlı bulunduğu imageView'i de kaldırın.
1, Ekim, 2015 burhanaksendir tarafından yorumlandı
Çok teşekkür ederim. Sorun çözüldü sayenizde. Eksik olmayın.
...