Pull to refresh

Comments 25

По мойму, очень хорошо а лаконично всё описано. Спасибо большое за обзор разных способов!
Как раз вовремя. Правда я уже реализовал real time blur, но все равно спасибо, я утвердился в мысли, что все правильно сделал. Кстати есть еще одна реализация динамического блюра, основанная на небольшом реверс-инжиниринге uitoolbar и использовании CAFilter. Правда это закрытый API, не факт, что Apple пропустит.
А почему-бы не использовать для этого CIFilter (CIGaussianBlur), он немного медленнее, но зато встроенный родной и стандартный.
А вот кстати хорошая статья на сравнение разных подходов.
А тут наглядная демонстрация встроенных фильтров.
Они медленные. Очень медленные.И CIFilter применяется к картинке, а CAFilter применяется к UIView.
CAFilter нельзя использовать, картинку из UIView получить — тривиальная задача, она всегда доступная через бэкинг стор у Layer этого вью.
Они не такие и медленные, долго создается контекст, если держать один контекст во время операции динамического размытия, то всё будет ок.
Особой разницы, чем блюрить нет.
Можно CIFilter, но UIImage+ImageEffects из WWDC работающий с Accelerated Framework гораздо лучше. Проблема в том, что renderInContext, который приходилось использовать до 7-ки работает очень медленно и real time blur с ним фиг сделаешь.
Ну так и CIGaussianBlur появился только в семерке вроде.
Тошнотворно он работает. Ужасное размытие, если сравнивать с Ps.
Беру свои слова обратно — забыл, что работаю в 5 битном режиме 8-|
В частности поэтому и (UIView *)snapshotViewAfterScreenUpdates:(BOOL)afterUpdates
Я бы с удовольствием почитал, как реализовать такой же эффект в вэбе.
(результаты моих экспериментов совсем не так красивы)
А на каких устройствах вы тестировали? Хотелось бы узнать скорость работы начиная с iPhone 4S. На 4-ке тоже было бы интересно узнать, но думаю и так ясно, что на нем будет гораздо медленнее работать.
А мне в iOS7 блур не понравился, т.к. иногда кажется, что экран испорчен/грязный, а оказывается это что-то на заднем плане.
Кстати, странно что Apple не включили в новые API возможность без каких-то ухищрений блюрить вьюхи так же как UIToolbar, было же очевидно что все ломанутся использовать эту возможность. Тем более что их же приложения вовсю эту возможность используют, например AppStore на iOS. И что мы в итоге получаем? Кучу приложений с растянутым UIToolbar и кражу лейера, несерьезно.
Насколько я заметил, то, что автор топика привел как «готовую реализацию» на самом деле просто выпилено из кода примеров WWDC. Статья тоже по сути просто вольный пересказ небольшого кусочка одной из сессий WWDC.
Готовых реализаций полно на gitlab и нет смысла изобретать велосипед.
Задача поста рассказать о там, как без лишних телодвижений реализовать блюр.
Из WWDC, пожалуй только applyLightEffect.
Насколько помню, текущая реализация слишком низкоуровневая (буквально на уровне драйверов видеокарты). Не включили по соображениям безопасности и целостности API.
Нативный блюр в iOS делается с помощью закрытых методов API, которые работают на очень низком уровне прямо с графическим буфером. Только это способно дать такую скорость отрисовки.
Снэпшоты подходят для статики, но динамику ими уже не нарисовать — будут тормоза (например, не выйдет сэмулировать блюр в навигейшн баре и списке прокрутки).
А куда более низкоуровневей? бэкинг-стор у CALAyer — это ни что иное как память видеокарты, ты веделяешь себе кусок и все операции происходят не в CPU, а в GPU с помощью конвеера.
Другой вопрос, что тут для эффектов испольузется блжндинг двух буферов, и для этого нужно иметь доступ к обоим бУферам. Поэтому мне кажется проблема состоит в том, что:
— с соображений безопасности
— не унифицировали API, поэтому не могут еще гарантировать обратой совместимости
— вообще решили, что не нужно это разработчикам.

Или всё вместе.
А кто-нибудь пробовал библиотеку iFlou вот отсюда? iFlou — The Blur Effect you need!
Blur эффект для iOS в данном случае использует технику, при которой используется заранее подготовленная картинка
Sign up to leave a comment.