2010-12-07 13 views
9

UIViewを含むUIScrollViewがあります。カスタムUIViewの中で、私はそれが見える(つまり、クリップされていない)矩形を知りたいと思います。UIViewの可視四角形を取得する

クイックnダーティソリューションは、カスタムUIViewは、親がUIScrollViewであると仮定し、それを介してコンテンツのサイズを取得することですが、私はそのような前提を伴わないより良いソリューションを探しています。

答えて

2

あなたが達成しようとしていることについてもっと詳しく知りたい場合に役立ちます。

あなたはこれを行うことができ、スーパービューのサイズを知りたい場合は、次の

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

動作しませんありません。私が探しているのは、ビュー全体を表示するのではなく、ビューの表示可能な矩形です。たとえば、UIView Aの一部が別のUIView Bと重なっている場合、ユーザーが見ることのできるUIView Aの可視領域は何ですか? –

17

これはUIViewの中で、それはあなたを取得する必要があることをトリック

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

利用を行う必要がありますスーパービュー(UIScrollView)でそのビューの可視セクションを表す四角形(存在する場合)。ここでは、階層の中にビューが存在しないと仮定していますが、もしあれば、コードを手抜きするのは簡単なはずです。

希望すると助かります!

+1

スーパービューのフレームがスーパービューの座標空間にあるので、これは 'superview.bounds'ではないでしょうか? –

+0

@ Awesome-o:あなたは正しいです。私の元のコードでは、スーパービューが画面全体(0、0原点)を満たしていると仮定していましたが、そうでない場合には境界が使用する方が安全です。更新された答え。 – foslock

1

スウィフト3

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