Как стать автором
Обновить

Комментарии 3

Спасибо за публикацию! У меня вопросы по поводу этой строчки:

$0.copy() as? ParallaxLayoutAttributes

Обязательно ли вызывать copy() и что будет если не вызвать?
Обязательно ли через as? пытаться преобразовать к ParallaxLayoutAttributes?

По поводу каста в ParallaxLayoutAttributes — я делаю так, чтобы было соответствие типов для применения функции prepareAttributes после, в общем случае это не необходимо


По поводу копирования — UICollectionViewFlowLayout кэширует аттрибуты, и когда будет необходимо перелейаутить ячейки, он обратится в кэш и узнает, необходимо ли это с помощью isEqual:. Модифицируя аттрибуты, которые мы получили через super, мы потенциально модифицируем этот кэш. Если мы попробуем это сделать без копирования, то, например, получим следующее сообщение в логе


UICollectionViewFlowLayout has cached frame mismatch for index path <NSIndexPath: 0x280664f60> {length = 2, path = 0 - 1} - cached value: {{37, 0}, {33, 66}}; expected value: {{33, 0}, {33, 66}}
This is likely occurring because the flow layout subclass PhotosApp.ThumbnailLayout is modifying attributes returned by UICollectionViewFlowLayout without copying them
Спасибо!
Зарегистрируйтесь на Хабре, чтобы оставить комментарий