Проверьте, находится ли UIView в видимом состоянии UIScrollView
Какой самый простой и элегантный способ проверить, является ли UIView видимым в текущем UIScrollView contentView? Есть два способа сделать это, один включает в себя положение contentOffset.y UIScrollView, а другим способом является преобразование прямоугольной области?
Ответы
Ответ 1
Если вы пытаетесь сработать, если на экране было прокручено изображение, попробуйте следующее:
CGRect thePosition = myView.frame;
CGRect container = CGRectMake(scrollView.contentOffset.x, scrollView.contentOffset.y, scrollView.frame.size.width, scrollView.frame.size.height);
if(CGRectIntersectsRect(thePosition, container))
{
// This view has been scrolled on screen
}
Ответ 2
Внесите scrollViewDidScroll:
в свой делегат просмотра прокрутки и вычислите вручную, какие виды видны (например, если проверка CGRectIntersectsRect(scrollView.bounds, subview.frame)
возвращает true.
Ответ 3
Swift 5: в случае, если вы хотите вызвать событие, которое проверяет, что весь UIView виден в представлении прокрутки:
extension ViewController: UIScrollViewDelegate {
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView.bounds.contains(targetView.frame) {
// entire UIView is visible in scroll view
}
}
}
Ответ 4
Я думаю, что ваши идеи верны. если бы это был я, я бы сделал это следующим образом:
//scrollView is the main scroll view
//mainview is scrollview.superview
//view is the view inside the scroll view
CGRect viewRect = view.frame;
CGRect mainRect = mainView.frame;
if(CGRectIntersectsRect(mainRect, viewRect))
{
//view is visible
}
Ответ 5
обновлено для swift 3
var rect1: CGRect!
// initialize rect1 to the relevant subview
if rect1.frame.intersects(CGRect(origin: scrollView.contentOffset, size: scrollView.frame.size)) {
// the view is visible
}