Проблема ContentOffset в UIScrollview

У меня странная проблема. Там, где у меня есть ScrollView и ContentOffset, он уже установлен. И я сделал условие в своем делегате с помощью приведенного ниже кода.

-(void)scrollViewDidScroll:(UIScrollView *)scrollView{

    if(scrollOffsetY > 90 && scrollOffsetY < 150) {

     NSLog(@"ContentOffset===>%f",ContentOffset);

    }
}

Условие, которое я написал, работает и входит в него только тогда, когда я медленно прокручиваю прокрутку. Если я прокручиваю быстрее. Это не входит в мою петлю.

Как я могу это исправить ? и получить точное значение, когда условие истинно?


person Vicky_Vignesh    schedule 20.04.2017    source источник
comment
переместите свой код в enddeclrating   -  person Anbu.Karthik    schedule 20.04.2017
comment
scrollViewDidScroll обновляется только для каждого кадра. Если вы прокручиваете быстро, contentOffset может прыгать на очень большое число для каждого кадра. Таким образом, он может прыгать от менее 90 до более 150 за один кадр, и код никогда не сработает. Не зная, какова ваша цель, невозможно посоветовать способ «исправить» это.   -  person Jon Rose    schedule 20.04.2017
comment
Привет @ Anbu.Karthik, scrollViewDidEndDecelerating Delegate вызывается только после завершения прокрутки, поэтому, когда я прокручиваю Fast . Условие удовлетворяется только тогда, когда остановка прокрутки между значением содержимого смещается в условии If, о котором я упоминал. Так что это мне не помогает.   -  person Vicky_Vignesh    schedule 20.04.2017
comment
Привет @JonRose, да, ты правильно сказал. Но как я могу достичь этого состояния? Есть ли альтернативный способ достижения этого?   -  person Vicky_Vignesh    schedule 20.04.2017
comment
какова ваша цель?   -  person Jon Rose    schedule 20.04.2017
comment
@JonRose Моя цель - произвести расчет ` CGFloat imageX = (scrollOffsetY - 90) * (axisXDuration / 60); ` В условиях. Этот расчет помогает мне сделать анимацию.   -  person Vicky_Vignesh    schedule 20.04.2017


Ответы (1)


UIScrollView не вызывает делегат для каждого прокручиваемого пикселя. Вместо этого он вызывает его для каждого отображаемого кадра. При быстрой прокрутке прокрутка может пропустить область, которую вы хотите проверить. Если вам нужно поймать момент, когда указанная область появляется на экране, вы можете добавить переменную для хранения предыдущего смещения и добавить такое условие:

 if (previousScrollOffsetY > 150 && scrollOffsetY < 90) || (previousScrollOffsetY < 90 && scrollOffsetY > 150) {
    NSLog(@"Skipped area")
}
previousScrollOffsetY = scrollOffsetY;
person Alex    schedule 20.04.2017