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

Xib içindeki bir view'ın güncel ölçüsünü nasıl alabilirim ?

0 oy
79 kez görüntülendi
28, Mayıs, 2016 ios development kategorisinde huseyinvural tarafından soruldu
28, Mayıs, 2016 huseyinvural tarafından düzenlendi
Arkadaşlar merhaba, @IBDesignable yapsını kullanarak, içinde videolarımı görüntüleyeceğim bir view oluşturuyorum.

.XİB dosyasının yapası temel olarak şöyle,

VİEW

----- Player_VİEW ( player ı içine ekkiyeceğim bir view, her taraftan 10 point boşluk var )

TableView içindeki hücrelerime bazı ihtimallerde yukarıdaki  xib dosyamı subview olarak aşağıdaki şekilde ekliyorum.

 let CView =  customVideoView()

 CView.frame = CGRectMake(0, 0, 200, 200)

customVideoView clası içinde gerekli xib'in yüklenme işlemlerini yapıyorum ve customviewim tam istediğim ölçülerde table cell içine ekleniyor. Fakat customView içinde OUTLETini eklediğim Player_VİEW ın frame değerini almaya çalıştığımda 200x200 olarak alamıyorum. Garip olan Player_VİEW ın dışındaki main view'ın ölçüsü doğru fakat içindeki view ın ölçüsü layoutSubview methodu dahil hiçbiryerde değişmiyor. Görsel olarak sorun yok fakat view yüklendiğinde player.frame = Player_VİEW.frame dersem yanlış ölçü elde eetmiş oluyorum view player büyük oluyor.

Buna neyin sebep olduğunu bir türlü çözemedim, bunun dışında hiç init methodunu kulanmayıp

" NSBundle.mainBundle().loadNibNamed("name", owner: VC.self, options: nil).first as? name " şeklinde de subview eklemeye çalıştım, fakat bu seferde frame in ölçüsünü değiştiremedim, nasıl bir hata yapıyorum anlayamadım. Yardımcı olabilir misiniz ?

Kodu aşağıda paylaşıyorum.
http://swiftstub.com/53483515

Xib dosyasında yukarıda yazdığım gibi main view içinde bir adet tarafıda 10pt boşluk bırakılmış view bulunuyor bunun içine aynı ölçüde olucak şekilde player ı eklemeye çalışıyorum. Help me

1 cevap

+1 oy
30, Mayıs, 2016 yasin tarafından cevaplandı

paylaştığınız kodu denediğimde sanırım doğru çalıştı.
http://pasteboard.co/1iWUIQq3.png
böyle olması gerekmiyormu istediğiniz değerlerin?

30, Mayıs, 2016 huseyinvural tarafından yorumlandı
çok pardon benim hatam. Yani kod aşağıda.
Gözümden kaçmış yaptığım değişiklik kusura bakmayın.

Ben aşağıda consraint ile yaptığım değişikliği manuel olrak frame i set ederek yamıştım.  Ama normalde, constraint eklediğim view in içine videoyu dahil edip, framinede  playerView'ın frameini eşitlediğmde tam oturması gereki diye düşünüyorum.

Bu olmuyor, videoplayer.frame = playerView.frame dersem constraint ile oluşmuş ölçü değil, xib içindeki ilk ölçü geliyor.

http://swiftstub.com/162049199

değiştirdiğim methode şu

    override func layoutSubviews(){

        print(self.view.frame.size)
        
        //Normalde, ben xib içinde playerView ın konumunu constraint ile belirledim aşağıda
        //yaptığım satırı yapmam lazım.
        // Ben aşağıdaki satırı kullanarak ölçünün doğru gelmesini sağlıyorum, ama mantıken diyorum ki constraint ekledim düzgünde gözüküyor,   print(self.playerView.frame.size) dedğimde niye xib de bulunan default ölçü geliyor ?

        ///self.playerView.frame = CGRectMake(0, 0, view.bounds.width-16, view.bounds.height-16)

        // Bu olçu hep yanlış geliyor,
        print(self.playerView.frame.size)

        avPlayerLayer.frame = self.playerView.frame

 

    }
30, Mayıs, 2016 yasin tarafından yorumlandı
sorununuzun kaynağını tam olarak anlayamamış olmakla beraber,
kurduğunuz yapıdan kaynaklı bir sıkıntıymış gibi geldiğini belirteyim.

bu custom player view'i nasıl kullanacağınızı tam olarak bilemiyorum ama anladığım kadarıyla bir yorumda bulunayım.

sanırım  avPlayerLayer'in,
içerisinde belli bir padding oranıyla merkezlendiği bir view oluşturmaya çalışıyorsunuz değil mi?
ve bu view de içerisinde yer aldığı super view'in ölçülerine göre resize edilmeli.

ne kadar uygun düşüyor sizin istediklerinize bilemiyorum ama verdiğiniz örnekten yola çıkarak cihaz oryantasyonu değiştiğinde bu düzenlemenin yapıldığı bir örnek hazırladım.

https://drive.google.com/file/d/0B_33To7xgYO7MDhqWnN6M3puU2c/view?usp=sharing
30, Mayıs, 2016 huseyinvural tarafından yorumlandı
Evet kusura bakmayın, anlatım biraz karışık oldu farkındayım. Aslında bende başka yollarla çözüm buluyorum fakat bu sorunu neyin oluşturduğunu anlamaya çalışıyorum.

Çok basitçe açıklamaya çalışayım.

Bir custom view oluşturuyorum .xib uzunatılı,  içinde her taraftan 15pt boşluk lucak şekilde sabitliyorum.

Bu xib dosyasının tasarım aşamasındaki rect değeri, (0,0,200,200) olsun, ben bu customView ımı istediğim table cell içinde çağırıp subview olarak eklersem.

let CV = customView();
CV.frame = CGRect(0,0,150,100)   

Cell içinde yukarıda belirtiğim ölçülerde customView'ım dahil edilmiş oluyor, içindeki  15pt boşluklu viewmın konumuda doğru oluyor sorun yok.

Şimdi ben, customView.swift içinde bir elemanı programtical olarak set etme ihtiyacı gibi bir durum için customView.swift içinde

print(self.view.bounds) ==>>  (0,0,150,100)  sonucunu veriyor,
fakat hemen altında, constraint tanımladığım customView.swift içindeki subviewin frame değerine ulaşmaya çalıştığımda,

print(self.insideView.bounds)  ==>>  (0,0,190,190) sonucnu veriyor,
customView.xib subview olarak eklediğim yerlerde, customView.xib içindeki constraint ile tanımlanmış elemanların ölçülerine, doğru şekilde ulaşamıyorum.

buna neyin sebep olduğunu anlayamadım.
...