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

Swift UIImageView - removeFromSuperview()

0 oy
53 kez görüntülendi
24, Kasım, 2015 ios development kategorisinde ibolat tarafından soruldu

Merhaba Arkadaşlar;

Uygulamada cihazdan gelen duruma göre imageView oluşturuluyor bu imageView içerisinde bir .gif oynatıyorum,

aşağıda imageView nasıl oluşturduğumu paylaştım;

let jGif = UIImage.gifWithName("active")

let img1 = UIImageView(image: jGif)

img1.frame = CGRect(x: self!.imgGif.frame.origin.x, y: self!.imgGif.frame.origin.y, width: self!.imgGif.frame.size.width, height: self!.imgGif.frame.size.height)

          self!.imgGif = img1

          self!.view.addSubview(self!.imgGif)

sorun: cihazdan sürekli olarak aynı sinyal gelirse program gelen sinyal sayısı kadar imageView oluşturuyor ve ekranda aynı resimden defalarca oluşuyor,

yapmak istediğim: ilk image view oluştuktan sonra bir daha oluşmasını engellemek,

bu sorun için imageView'in kullanabileceğim bir metodu var mı?

1 cevap

0 oy
24, Kasım, 2015 yasin tarafından cevaplandı

bahsettiğiniz yapı nasıl tam anlayamadım ama sanırım bir imageView oluşturup her defasında aynı imageView içerisinde farklı bir imaj görüntülenmesini istiyorsunuz galiba.
umarım doğru anlamışımdır. :)
bu sinyal dediğiniz şey veya aksiyon her neyse bir metodu tetikliyordur herhalde.
ve o metod içerisinde de yukarıda verdiğiniz kodlar vardır sanırım.

o halde şöyle bir şey yaparsanız sorununuz çözülür.

var img1:UIImageView! = nil    
func myMethod() {        
    if self.img1 == nil {
        self.img1 = UIImageView()
        self.view.addSubview(self.img1)
    }
    let jGif:UIImage = UIImage.gifWithName("active")
    self.img1.frame = CGRect(x: 0 , y: 0, width: jGif.size.width, height: jGif.size.height)
    self.img1.image = jGif        
}
24, Kasım, 2015 ibolat tarafından yorumlandı
Daha net anlatayım yasin hocam,

Uygulama cihaz ile haberleşiyor cihaz dan uygulamaya örnek olarak sürekli "ON" sinyali gönderirsem, uygulamanın "ON" methodunun içerisinde imageView oluşturduğum için sürekli image oluşuyor ve ekranda birden fazla image görünüyor benim istediğim  cihazdan bana "ON" sinyali geldiğinde sadece 1 kere image oluşsun ben ard arda  on sinyalide göndersem sadece 1 tane oluşsun , umarım anlatabildim bu sefer kusura bakmayın hocam :)
24, Kasım, 2015 yasin tarafından yorumlandı
yukarıda verdiğim örnek işinize yarayacaktır.
benim verdiğim örnekte myMethod içerisinde kalan tüm kodları sizin ON metodunuzun içine ve yine verdiğim örnekte metod dışında tanımladığım img1 imageView değişkeniyle beraber kopyalayın.
ek olarak if closure'i dışında bıraktığım her şeyi içeri alın.

yani şöyle yapın kısacası;


var img1:UIImageView! = nil    
func ON() {        
    if self.img1 == nil {
        self.img1 = UIImageView()
        let jGif:UIImage = UIImage.gifWithName("active")
        self.img1.frame = CGRect(x: 0 , y: 0, width: jGif.size.width, height: jGif.size.height)
        self.img1.image = jGif
        self.view.addSubview(self.img1)
    }       
}
24, Kasım, 2015 ibolat tarafından yorumlandı
if (message == "STATUS"){
                    
                   
                   var img1:UIImageView! = nil
                    self!.imgGif = nil
                    
                    if(detail == "ON"){
                        
                       if self!.img1 == nil {
                            img1 = UIImageView()
                            let jGif:UIImage = UIImage.gifWithName("active")!
                            self!.imgGif.frame = CGRect(x: self!.blurViewAlt.frame.origin.x , y: self!.blurViewAlt.frame.origin.y, width: 280.0, height: 105.0)
                            img1.image = jGif
                            self!.imgGif = img1
                            self!.view.addSubview(self!.imgGif)     
                        
                       }
                        
                    }
     }


Yasin hocam denedim ama yine aynı sonuc :) defalarca aynı .gif'ten oluşturuyor
if(detail == "ON") bu şarta girdiğinde

kullandığım fonksiyon  yukarıda gösterdiğim gibi en sonda sadece oluşturulan img1 .gif'ini imgGif'e atıyorum

Normalde kullanıcının sürekli "ON" gönderme şansı yok ama sadece programsal bir eksiklik olduğu için kafamı taktım sonuç olarakta düzeltemiyorum.
24, Kasım, 2015 yasin tarafından yorumlandı
hmm. sanırım ben anlatamıyorum.
şöyleki "img1" bir instance property olmalı.
yani methodun yer aldığı class içerisinde tanımlı olmalı. methodun içerisinde değil.
siz method içine alarak yine instance variable olarak tanımlamışsınız.   :)


viewController class'ını ele alalım.
aşağıdaki gibi bir yapısı vardır default viewController class'ının. siz bu kodu custom bir class'damı çalıştırıyorsunuz bir fikrim yok ama farketmez. şöyle olmalı



import UIKit

class ViewController: UIViewController {




var img1:UIImageView! = nil   //<-- bakın bu bir instance property. kullandığınız ON methodunun dışında tanımlı yani


  
func ON() {        
    if self.img1 == nil {
        self.img1 = UIImageView()
        let jGif:UIImage = UIImage.gifWithName("active")
        self.img1.frame = CGRect(x: 0 , y: 0, width: jGif.size.width, height: jGif.size.height)
        self.img1.image = jGif
        self.view.addSubview(self.img1)
    }       
}



}
...