Я выполнил собственный элемент управления обновлением (мой собственный класс, а не подкласс), и по какой-то причине, начиная с перехода на iOS 8, устанавливая contentInset прокрутки (в частности, UICollectionView), чтобы запустить обновленная анимация вызывает странный прыжок/заикание. Вот мой код:Анимация UIScrollView contentInset вызывает скачкообразное замедление
- (void)containingScrollViewDidScroll:(UIScrollView *)scrollView
{
CGFloat scrollPosition = scrollView.contentOffset.y + scrollView.contentInset.top;
if(scrollPosition > 0 || self.isRefreshing)
{
return;
}
CGFloat percentWidth = fabs(scrollPosition)/self.frame.size.height/2;
CGRect maskFrame = self.maskLayer.frame;
maskFrame.size.width = self.imageLayer.frame.size.width * percentWidth;
[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
self.maskLayer.frame = maskFrame;
[CATransaction commit];
}
- (void)containingScrollViewDidEndDragging:(UIScrollView *)scrollView
{
if((self.maskLayer.frame.size.width >= self.imageLayer.frame.size.width) && !self.isRefreshing)
{
self.isRefreshing = YES;
[self setLoadingScrollViewInsets:scrollView];
[self startAnimation];
[self sendActionsForControlEvents:UIControlEventValueChanged];
}
}
- (void)setLoadingScrollViewInsets:(UIScrollView *)scrollView
{
UIEdgeInsets loadingInset = scrollView.contentInset;
loadingInset.top += self.frame.size.height;
UIViewAnimationOptions options = UIViewAnimationOptionAllowUserInteraction | UIViewAnimationOptionBeginFromCurrentState;
[UIView animateWithDuration:0.2 delay:0 options:options animations:^
{
scrollView.contentInset = loadingInset;
}
completion:nil];
}
В основном когда пользователь отпускает обновить, я анимировать contentInset на высоту контроля обновления. Я полагаю, что анимация уменьшила бы заикание/прыткость, что и в iOS 7. Но в iOS 8, когда scrollView освобождается от перетаскивания, вместо того, чтобы просто анимировать содержимое ContentInset, содержимое представления прокрутки скачкообразно падает с точки выпуска быстро, а затем анимирует плавно. Я не уверен, что это ошибка в iOS 8 или что-то еще. Я также попытался добавить:
scrollView.contentOffset = CGPointZero;
в блоке анимации, который ничего не менял.
У кого-нибудь есть идеи? Любая помощь будет высоко оценен. Благодаря!
Работал для меня! Ты жжешь. Спасибо, что поставили это здесь. – boztalay
Вы правы, это исправляет проблему. Похоже, что анимация только содержимогоInset вызывает анимацию, которая мешает анимации замедления, поэтому появляется «прыжок». Включение contentOffset запускает анимацию с текущей позиции. –
Включая смещение содержимого в анимации, кажется довольно сложно угадать. Как вы это определили? – Tudorizer