Я добавляю несколько CALayers в качестве подслоев слоя UIView. Содержимое каждого слоя - это другое изображение, загруженное с сервера. Каждый слой анимируется из экрана в произвольно сгенерированное положение. Данные изображения загружаются асинхронно. Каждое изображение составляет примерно 300x300 или меньше.Оптимизация CALayer?
В результате случайного размещения слои перекрываются, а некоторые перекрываются слоями над ними. Это все хорошо.
Я удаляю слои, поскольку они полностью закрываются из вида, используя предложение в the answer to this question Расчеты для определения покрытия происходят в отдельной теме.
У меня есть UIPanGestureRecognizer, который позволяет пользователю перетаскивать слои вокруг экрана.
Я столкнулся с проблемой производительности, когда количество добавленных слоев приближается к 25-30 и становится все хуже. Анимация становится изменчивой и часто полностью отсутствует (недавно добавленные слои просто появляются в их конечном положении). И жесты панорамы либо игнорируются, либо приводят к изменчивому перемещению выбранного слоя.
Я предполагаю, что я убиваю GPU всеми перекрывающимися слоями и еще один анимированный слой выше?
Любые предложения по улучшению производительности?
Рекомендации по работе с большим количеством слоев?
Лучше ли начать анимацию слоя в отдельном окне просмотра, чем ранее добавленные слои?
Спасибо!
Спасибо, Билл. Я сделаю это. У меня создалось впечатление, что непрозрачность игнорируется при поставке layer.contents (используется только при наложении слоя)? Альфа-бит будет более сложным - я использую прозрачную рамку шириной 2 пикселя вокруг края изображений, чтобы сгладить вращающиеся края. Выключить на инструменты! – TomH
Привет, Tom-yep opaque игнорируется, если вы не рисуете, вы можете думать о нем как о 2-ом аргументе для UIGraphicsBeginImageContextWithOptions, если у вас есть альфа-канал, тогда слой будет прозрачным - если у вас есть время, пожалуйста, напишите об ошибке edgeAntialiasingMask –
Потрясающие.Я добавлял альфа-канал к моему UIImage, добавляя прозрачную границу 2px, а затем используя изображение в качестве содержимого слоя. Perf значительно улучшается за счет добавления альфа-и прозрачной границы - никаких проблем с> 30 уровнями. К сожалению, edgeAntialiasingMask, похоже, не имеет никакого эффекта. Я напишу ошибку. – TomH