0

Я разработал пользовательский UICollectionViewLayout, чтобы обрабатывать некоторые расширенные требования к макету в приложении для клиентов, что похоже на работу очень хорошо. Пока я не начну использовать анимацию.Пользовательские проблемы с анимацией UICollectionViewLayout

Я потратил некоторое время на работу, чтобы документировать и сделать его более гибким, чтобы его можно было найти здесь: https://github.com/liamnichols/LNCollectionViewPagedLayout.

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

С самого начала я заметил, что там, где возникают проблемы с анимацией, мне никогда не нужно было использовать анимации, поэтому не пытались исследовать/исправить, но теперь это стало требованием расширения расширения, которое показывает, что еще больше контента и когда Я пытаюсь использовать любые формы методов анимации (, performBatchUpdates:completion: и т. Д.). Я всегда получаю очень странное поведение от сбоев (view argument is nil) до испорченных макетов.

В настоящее время мой макет работает путем создания словаря UICollectionViewLayoutAttributes на prepareLayout попросив делегат для размера каждой ячейки затем запустить некоторую логику, чтобы увидеть, если он будет соответствовать или нет, и так далее ...

Когда layoutAttributesForElementsInRect:, он может просто запросить словарь и получить массив атрибутов, релевантных для этого прямоугольника.

Прежде всего, это лучший способ создать этот макет? Мне было очень сложно найти документацию по созданию настраиваемых макетов для удовлетворения моих потребностей и в итоге рассмотрели другие библиотеки с открытым исходным кодом для указателей на то, что делать.

Во-вторых, я не реализовал исходные/окончательные методы атрибутов макета, так как не могу понять, как их правильно использовать. Является ли это причиной того, что у меня возникают проблемы или они не являются обязательными?

Любая помощь или указатели для правильного создания UICollectionViewLayouts будет замечательной.

ответ

1

Для вопросов с расширяющимися ячейками (или просто сменами ячеек в целом), этот ответ may be helpful. Короткий ответ заключается в том, что реализация по умолчанию initialLayoutAttributesForAppearingItemAtIndexPath: (и, вообще, все методы атрибута начального/конечного макета) не всегда возвращает правильный фрейм, и вы должны переопределить этот метод и исправить ошибки.

Отладка этих проблем довольно проста. Начните с регистрации возвращаемых атрибутов примерно таким образом:

- (UICollectionViewLayoutAttributes *)initialLayoutAttributesForAppearingItemAtIndexPath:(NSIndexPath *)itemIndexPath { 
    UICollectionViewLayoutAttributes *attributes = [super initialLayoutAttributesForAppearingItemAtIndexPath:itemIndexPath]; 
    NSLog(@"indexPath=%@, attributes=%@", itemIndexPath, attributes); 
    return attributes; 
} 

и определить, когда рамы неправильные. Оттуда вы можете придумать подход для исправления ошибок. Вот так подробно, как я могу получить, не зная больше деталей.

+0

Спасибо за указатели, я рассмотрю методы initialLayoutAttributes и посмотрю, как все идет! – liamnichols

+0

Я принимаю это как ответ, так как советы по отладке помогли мне обнаружить, что я читал границы коллекции, когда contentOffset не был CGPointZero .. это приводит к неправильным значениям, заставляющим мой макет испортиться и сбой. Спасибо за советы – liamnichols

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