У меня плохая производительность при использовании эффекта тени
Я помещаю несколько видов изображений в режим прокрутки.
И когда я перетаскиваю это представление прокрутки, у меня не было никаких проблем.
Но после того, как я применил эффект тени к этим изображениям, перетаскивание этого вида прокрутки имеет плохую производительность.
Я использовал методы shadowOpacity, shadowRadius и shadowOffset.
Пример:
[ [ anImageView layer ] shadowOpacity: 1.0 ];
При использовании эффекта тени эффект плохой производительности серьезно, я нарисую тень изображений напрямую.
Если есть какие-то советы по этим вопросам, сообщите мне об этом.
Я хочу использовать теневой эффект на iOS программно, потому что у меня худший навык рисования.
Спасибо за ваше чтение.
Ответы
Ответ 1
См. CALayer.shouldRasterize (iOS 3.2+, но так же shadowOffset/etc):
Когда значение этого свойства равно YES, слой отображается как растровое изображение в его локальном пространстве координат, а затем скомпонован в пункт назначения любым другим контентом. Эффекты теней и любые фильтры в свойстве фильтров растеризуются и включаются в растровое изображение.
Вероятно, вы также захотите установить растрированиеScale соответствующим образом.
Ответ 2
При использовании восстановленного слоя действительно повышается производительность, вы получите лучшие (более приятные) результаты, используя протуберант shadowpath, как предлагает @wayne-hartman.
Отметьте http://nachbaur.com/blog/fun-shadow-effects-using-custom-calayer-shadowpaths, как использовать теневой путь CALayer.
Ответ 3
Всякий раз, когда вы работаете с тенями, лучше использовать бежевый путь в качестве фона. Это поможет вам установить shadowPath, что резко повысит производительность. Rasterize улучшит производительность, но setShadowPath улучшит в 5 раз больше, чем просто установит растеризацию.
path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, 100, 100) cornerRadius:10];
[self.layer setShadowColor:[UIColor blackColor].CGColor];
[self.layer setShadowOpacity:1.0f];
[self.layer setShadowRadius:10.0f];
[self.layer setShadowPath:[path CGPath]];
Ответ 4
У меня была точно такая же проблема. Нарисовать тень - довольно дорогостоящая многопроходная операция, поэтому я могу ее понять, и я думаю, что тень рисуется непрерывно по мере прокрутки. Единственное, что я нашел, - это визуализировать тень вручную в изображении и отображать это изображение за изображениями в прокрутке. Кажется, что это хорошо работает.