Я хотел бы, чтобы мой UIScrollView
естественным образом скользил к окончаниям при определенных добавочных значениях, соответствующих каждым 50 точкам ширины горизонтально прокручиваемого UIScrollView
. Для этого я настроил scrollViewWillEndDragging вот так (как рекомендуется, но подробно не описано в ответе здесь Прокрутка горизонтального UIScrollView с пошаговым шагом?):
- (void) scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset{
if(fmodf(targetContentOffset->x, 50.0)){
int roundingNumber1 = 50;
CGFloat newOffset = roundingNumber1 * floor(((scrollView.contentOffset.x)/roundingNumber1)+0.5);
targetContentOffset->x = newOffset;
}
}
Однако я не уверен, что это на самом деле останавливает представление с определенным шагом, и я также замечаю, что эффект асимметричен. Хотя мои движения прокрутки/скорость/и т. д. одинаковы, прокрутка вправо намного менее плавна, чем прокрутка влево. Прокрутка вправо останавливается быстрее и резче. здесь есть видео. Почему это поведение асимметрично и как его изменить?
Причина, по которой я думаю, что прокрутка не останавливается с шагом 50, заключается в том, что у меня также есть UILabel
под представлением прокрутки, которое обновляется другими функциями делегата, чтобы показать смещение. Показываемое значение редко приближается к 50 при прокрутке. Это потому, что прокрутка не увеличивается до значений 50 или потому что я не обновляюсь в нужное время?
Спасибо за любой совет.
- (void) scrollViewDidScroll:(UIScrollView *)scrollView{
if(abs(self.lastOffset - scrollView.contentOffset.x) > 49){
CGFloat newNumber = scrollView.contentOffset.x;
self.numberProperty.text = [NSString stringWithFormat:@"%.00f", scrollView.contentOffset.x];
self.lastOffset = scrollView.contentOffset.x;
[self.view setNeedsDisplay];
}
}
- (void) scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView{
self.numberProperty.text = [NSString stringWithFormat:@"%.00f", scrollView.contentOffset.x];
}