2010-12-07 19 views
9

Özel biriçeren bir UIScrollView sahibim. Özel UIView içinde, görünür olduğu (yani kırpılmamış) dikdörtgeni bilmek isterim.UIView'ın görünür dikdörtgenini alma

Hızlı-n-kirli çözüm, özel UIView öğesinin üst öğenin bir UIScrollView olduğunu varsayması ve içerik boyutunun bunun üzerinden alınmasını sağlamaktır, ancak bu tür varsayımları içermeyen daha iyi bir çözüm arıyorum.

cevap

2

Neyi başarmaya çalıştığınıza dair daha fazla bilgi verirseniz yardımcı olur.

sen bunu yapabilirsin süper görünümü boyutunu bilmek isterseniz:

CGRect superFrame = [self superview].frame; 
+0

yok. Aradığım şey, manzaranın çerçeve rect'i değil, görüntünün görünür rektidir. Örneğin, UIView A'nın bir kısmı başka bir UIView B ile çakışırsa, kullanıcı tarafından görülebilen UIView A'nın görünür alanı nedir? –

17

Bu kandırmasına ve UIView o almalısınız

CGRect visibleRect = CGRectIntersection(self.frame, superview.bounds); 

kullanın yapmalıdır sen Bu görünümün görünür bölümünü temsil eden dikdörtgen (varsa) süper görünümde (UIScrollView). Burada hiyerarşide aralarında görüş olmadığını varsayardım, ama varsa, işe yaramazsa, kod önemsiz olmalıdır.

Umarım yardımcı olabilirim! çalışmayacaktır

+1

Superview'in çerçevesi süper görüntülerin koordinat alanında olduğundan, bu 'superview.bounds' olmasın mı? –

+0

@ Awesome-o: Siz haklısınız. Orijinal kodum, süper ekranın tüm ekranı doldurduğunu varsaydı (0, 0 orijin) ancak sınırlar, kullanılmaması durumunda kullanmak için daha güvenli olurdu. Güncelleme yanıtı. – foslock

1

Swift 3

extension UIView { 
    var visibleRect: CGRect? { 
     guard let superview = superview else { return nil } 
     return frame.intersection(superview.bounds) 
    } 
}