определить, когда рамка uiscrollview касается границ главного экрана

#iphone #uiscrollview #scroll #geometry

#iPhone #uiscrollview #прокрутка #геометрия

Вопрос:

как я могу определить, когда UIScrollView рамка пересекается с главным экраном (при прокрутке) в обоих направлениях вверх и вниз? я пытался сделать это следующим образом :

 - (void)detectScreenBoundsIntersect{
    if (CGRectIntersectsRect([myScrollView frame], [[UIScreen mainScreen] bounds])) {
        NSLog(@"COLLISION");
    }
} 
  

Но, похоже, это не работает! Спасибо.

Комментарии:

1. UIScrollView объект не перемещается во время прокрутки. Вы хотите знать, достигло ли содержимое границ?

Ответ №1:

Примите UIScrollViewDelegate протокол в контроллере просмотра и задайте делегирование вида прокрутки контроллеру. Примите scrollViewDidScroll: метод.

 - (void) scrollViewDidScroll:(UIScrollView *)scrollView {
    if ( [self hasReachedAVerticalEdge] ) {
        NSLog(@"At World's End");
    }
}

- (BOOL) hasReachedAVerticalEdge {
    CGPoint offset = myScrollView.contentOffSet;
    CGSize contentSize = myScrollView.contentSize;
    CGFloat height = myScrollView.frame.size.height;
    CGFloat width  = myScrollView.frame.size.width;

    if ( offset.y == 0 || 
         (offset.y   height) == contentSize.height ) {
        return YES;
    }

    return NO;
}
  

Это то, что вы ищете?

Проверяет, попадает ли изображение в видимую часть прокрутки.

 - (BOOL)isContentFrameVisible:(CGRect)aFrame {
    CGRect visibleRect = CGRectZero;
    visibleRect.origin = myScrollView.offset;
    visibleRect.size = myScrollView.frame.size;

    if ( CGRectIntersectsRect(visibleRect, aFrame) ) {
        return YES;
    }
}
  

Комментарии:

1. Спасибо за ответ, но, похоже, в моем случае это не работает!!

2. Тогда я не получил то, что вы искали. Не могли бы вы немного объяснить это.

3. я вызываю этот метод внутри метода: -(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event простым NSLog вызовом, чтобы я мог видеть, и я получил журнал до того, как scrollview достигнет края экрана.

4. ViewController моего представления, который содержит этот scrollview

5. Этот метод, вероятно, не вызывается. UIScrollView объект узурпирует касания. Я обновлю свой ответ альтернативным подходом.