Вы должны вычислить его, используя свойства contentOffset и contentSize из UIScrollView, например:
CGRect visibleRect;
visibleRect.origin = scrollView.contentOffset;
visibleRect.size = scrollView.contentSize;
Затем вы можете войти в систему для проверки работоспособности:
NSLog( @"Visible rect: %@", NSStringFromCGRect(visibleRect) );
Чтобы учесть масштабирование (если это еще не сделано свойством contentSize), вам необходимо разделить каждую координату на zoomScale, или для повышения производительности вы умножите на 1,0 / zoomScale:
CGFloat scale = (CGFloat) 1.0 / scrollView.zoomScale;
if ( isless(scale, 1.0) ) // you need to #include <math.h> for isless()
{
visibleRect.origin.x *= scale;
visibleRect.origin.y *= scale;
visibleRect.size.width *= scale;
visibleRect.size.height *= scale;
}
Помимо: я использую isless (), isgreater (), isequal () и т. Д. Из math.h, потому что они (предположительно) будут делать правильные вещи в отношении «неупорядоченных» результатов сравнения с плавающей точкой и других странных и замечательных архитектур конкретные случаи FP.
Редактировать: вам нужно использовать bounds.size
вместо contentSize
при расчете visibleRect.size
.