Hoşgeldin. Soru sormak veya cevaplamak için hemen üye ol.
0 oy
878 kez görüntülendi
ios development kategorisinde tarafından
Ş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
tarafından
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)
        }
    }
}
tarafından
Tam istediğim gibi. Gerçekten çok süper olmuş. Yardımlarınız için teşekkür ederim.
tarafından
Şöyle bir sorun gözlemliyorum. CPU kullanımı giderek artıyor ve %120'ye çıkıyor. Ama sorunu çözemedim.
tarafından
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.
tarafından
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.
tarafından
+1
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.
tarafından
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()
tarafından
evet, hatta bağlı bulunduğu imageView'i de kaldırın.
tarafından
Çok teşekkür ederim. Sorun çözüldü sayenizde. Eksik olmayın.
...