2013-04-26 5 views
0

Я использую KVO для наблюдения за свойством contentOffsetUIScrollView. Когда пользователь потянет scrollView вниз и contentOffset.y == -50.0, я хочу, чтобы прокрутка отображалась, как будто пользователь взял свой палец с экрана. Есть какой-либо способ сделать это?Программно отменить прокрутку пользователя UIScrollView

ответ

0

Да, вы можете ограничить его смещение до -50.0.

- (void) observeValueForKeyPath:(NSString*)keyPath 
         ofObject:(id)object 
         change:(NSDictionary*)change 
         context:(void*)context 
{ 
    //if this is not the only KVO then you should first perform some checks 
    //if the object and keypath are correct 

    //otherwise you can omit the check or modify, if your UIScrollView is subclassed 

    if ([object isKindOfClass:[UIScrollView class]]) 
    { 
     UIScrollView *scrl = (UIScrollView *)object; 

     CGPoint offset = scrl.contentOffset; 

     if (offset.y < -50.0f) 
     { 
      offset.y = -50.0f; 
      scrl.contentOffset = offset; 
     } 
    } 
} 

Вы можете рассмотреть вопрос о переносе этого кода в scrollView методов делегата (didScroll: и др. КВО является отличным инструментом, но это может быть слишком дорого для быстро меняющихся значений.

+0

Спасибо за ответ, но к сожалению, установка свойства contentOffset scrollview не делает действие scrollview, как пользователь, отпустить его. Я просто попробовал его там. –

+1

Хм, возможно, я понял, что вы ошибаетесь. Поэтому вы хотите, чтобы scrollView продолжал прокручивать, как если бы пользователь был поднят его палец? В этом случае я попробую установить 'touchesEnabled' в' NO', когда 'y' достигает -50.0, но вы также для реализации метода делегата 'didEndScrollingAnimation', где вы могли бы повторно использовать штрихи для этого' scrollView': я бы определенно переместил весь код, связанный с поведением, на 'делегировать' методы и вырезать KVO в этом конкретном случае. –

Смежные вопросы