iOS 응용 (swift)
[iOS - swift] 특정 CGRect 포함, 특정 뷰 포함 확인 방법, 화면에 특정 뷰가 보이는지 확인 방법, intersects(_:), contains(_:)
jake-kim
2023. 10. 18. 01:27
특정 rect 영역이 포함되는지 확인 방법
- 진한 회색뷰이 얕은 회색뷰에 완전히 포함되는지 확인하는 방법?
- 오렌지색 뷰가 회색뷰에 걸쳐있는지 확인하는 방법?

- contains(_:) 완전히 포함되었는지 확인이 가능
extension CGRect {
public func contains(_ rect2: CGRect) -> Bool
}

- 두 개가 걸쳐져 있는지 확인 가능
extension CGRect {
public func intersects(_ rect2: CGRect) -> Bool
}

- 아래처럼 사용
containerView.frame.intersects(orangeView.frame) // true
containerView.frame.contains(orangeView.frame) // false
containerView.frame.contains(contentView.frame) // true
응용) 화면에 특정 뷰가 보이는지 확인 방법
- intersects를 활용하면 화면에 특정 뷰가 조금이라도 보이는지 확인이 가능
- contains를 활용하면 화면에 특정 뷰가 모두 보이는지 확인이 가능
- *convert(_:to:) 함수를 이용하여 특정 뷰를 window기준으로 잡은 rect값을 intersects나 contains 함수를 사용하여 비교가 가능
- * convert(_:to:) 함수 개념: 이전 포스팅 글 참고
- 아래처럼 extension으로 사용이 가능
extension UIView {
var visible: Bool {
guard window != nil else { return false }
let viewFrame = convert(bounds, to: nil)
let screenBounds = UIScreen.main.bounds
return viewFrame.intersects(screenBounds)
}
var fullyVisible: Bool {
guard window != nil else { return false }
let viewFrame = convert(bounds, to: nil)
let screenBounds = UIScreen.main.bounds
return screenBounds.contains(viewFrame)
}
}
* 전체 코드: https://github.com/JK0369/ExVisible
* 참고
- https://developer.apple.com/documentation/coregraphics/1454747-cgrectintersectsrect
- https://developer.apple.com/documentation/coregraphics/1454186-cgrectcontainsrect