В приложении Music новой iOS мы видим обложку альбома, которая размывает его.
Как можно сделать что-то подобное? Я прочитал документацию, но там ничего не нашел.
ios
objective-c
graphics
filtering
core-image
kondratyevdev
источник
источник
Ответы:
Ты можешь использовать
UIVisualEffectView
для достижения этого эффекта. Это нативный API, который был точно настроен для производительности и продолжительного времени автономной работы, плюс он прост в реализации.Swift:
Objective-C:
Если вы представляете этот контроллер представления модально, чтобы размыть базовый контент, вам нужно установить модальный стиль представления в Over Current Context и установить фоновый цвет, чтобы очистить, чтобы гарантировать, что базовый контроллер представления останется видимым, как только он будет представлен поверх.
источник
insertSubView:belowSubView:
комментарию в этом коде я использовал следующее, чтобы установить размытие в качестве фона вида:view.insertSubview(blurEffectView, atIndex: 0)
UIAccessibilityIsReduceTransparencyEnabled()
.Базовое изображение
Поскольку это изображение на снимке экрана статично, вы можете использовать его
CIGaussianBlur
из Core Image (требуется iOS 6). Вот пример: https://github.com/evanwdavis/Fun-with-Masks/blob/master/Fun%20with%20Masks/EWDBlurExampleVC.mИмейте в виду, это медленнее, чем другие варианты на этой странице.
Размытие в стеке (Box + Gaussian)
Ускорение Фреймворка
В сеансе «Внедрение привлекательного пользовательского интерфейса на iOS» из WWDC 2013 Apple объясняет, как создать размытый фон (в 14:30), и упоминает метод,
applyLightEffect
реализованный в примере кода с использованием Accelerate.framework.GPUImage использует шейдеры OpenGL для создания динамических размытий. Он имеет несколько типов размытия: GPUImageBoxBlurFilter, GPUImageFastBlurFilter, GaussianSelectiveBlur, GPUImageGaussianBlurFilter. Существует даже GPUImageiOSBlurFilter, который «должен полностью повторять эффект размытия, обеспечиваемый панелью управления iOS 7» ( твит , статья ). Статья подробная и информативная.
От indieambitions.com: выполнить размытие с помощью vImage . Алгоритм также используется в iOS-RealTimeBlur .
От Ника Локвуда: https://github.com/nicklockwood/FXBlurView В этом примере показано размытие в виде прокрутки. Он размывается с dispatch_async, а затем синхронизируется для вызова обновлений с UITrackingRunLoopMode, чтобы размытие не отставало, когда UIKit отдает больший приоритет прокрутке UIScrollView. Это объясняется в книге Ника Core Core Animation , которая, кстати, великолепна.
iOS-blur Это берет размывающий слой UIToolbar и помещает его в другое место. Apple отклонит ваше приложение, если вы воспользуетесь этим методом. См. Https://github.com/mochidev/MDBlurView/issues/4.
Из блога Evadne: LiveFrost: быстрая синхронная синхронизация снимков UIView . Отличный код и отличное чтение. Некоторые идеи из этого поста:
Другие вещи
Энди Матущак сказал в Твиттере: «Вы знаете, во многих местах, где, похоже, мы делаем это в режиме реального времени, это статично с умными трюками».
На сайте doubleencore.com говорят: «мы обнаружили, что радиус размытия в 10 пунктов плюс увеличение насыщенности на 10 пунктов лучше всего имитируют эффект размытия iOS 7 в большинстве случаев».
Взгляните на частные заголовки Apple SBFProceduralWallpaperView .
Наконец, это не настоящее размытие, но помните, что вы можете настроить rasterizationScale для получения пиксельного изображения: http://www.dimzzy.com/blog/2010/11/blur-effect-for-uiview/
источник
UIImage
иначе он будет выглядеть слишком большим на устройстве Retina ...Я решил опубликовать письменную версию Objective-C из принятого ответа, чтобы предоставить больше вариантов в этом вопросе.
Ограничения могут быть удалены, если вы захотите использовать incase, если вы поддерживаете только портретный режим, или я просто добавляю флаг к этой функции, чтобы использовать их или нет ..
источник
Я не думаю, что мне разрешено публиковать код, но приведенный выше пост с упоминанием примера кода WWDC является правильным. Вот ссылка: https://developer.apple.com/downloads/index.action?name=WWDC%202013
Файл, который вы ищете, является категорией в UIImage, а метод applyLightEffect.
Как я отметил выше в комментарии, Apple Blur имеет насыщенность и другие вещи, помимо размытия. Простое размытие не подойдет ... если вы хотите подражать их стилю.
источник
Вот быстрая реализация в Swift с использованием CIGaussianBlur:
источник
Я думаю, что самое простое решение для этого - переопределить UIToolbar, который стирает все, что стоит за ним в iOS 7. Это довольно хитро, но очень просто для реализации и быстро!
Вы можете сделать это с любым представлением, просто сделайте его подклассом
UIToolbar
вместоUIView
. Вы даже можете сделать это сUIViewController
«Sview
собственности, к примеру ...1) создайте новый класс «Подкласс»
UIViewController
и установите флажок «С XIB для пользовательского интерфейса».2) Выберите View и перейдите к инспектору идентичности на правой панели (alt-command-3). Измените «Класс» на
UIToolbar
. Теперь перейдите к инспектору атрибутов (alt-command-4) и измените цвет фона на «Очистить цвет».3) Добавьте подпредставление к основному виду и подключите его к IBOutlet в вашем интерфейсе. Назови это
backgroundColorView
. Это будет выглядеть примерно так, как частная категория в.m
файле реализаций ( ).4) Перейдите к
.m
файлу реализации контроллера view ( ) и измените-viewDidLoad
метод, чтобы он выглядел следующим образом:Это даст вам темно-серый вид, который размывает все позади. Никаких забавных дел, медленного размытия изображения ядра, использующего все, что у вас под рукой, предоставляется OS / SDK.
Вы можете добавить это представление контроллера представления к другому представлению, следующим образом:
Дайте мне знать, если что-то неясно, я буду рад помочь!
редактировать
UIToolbar был изменен в 7.0.3, чтобы дать возможно нежелательный эффект при использовании цветного размытия.
Раньше мы могли устанавливать цвет с помощью
barTintColor
, но если вы делали это раньше, вам нужно будет установить альфа-компонент меньше 1. В противном случае ваш UIToolbar будет полностью непрозрачным цветом - без размытия.Это может быть достигнуто следующим образом: (имея в виду
self
подклассUIToolbar
)Это даст синий оттенок размытому виду.
источник
self.backgroundColorView.opaque = NO;
self.backgroundColorView.alpha = 0.5;
self.backgroundColorView.backgroundColor = [UIColor colorWithWhite:0.3 alpha:1];
но фон не был размытым, просто сделайте хороший эффект. все равно спасибо тебе!Пользовательский масштаб размытия
Вы можете попробовать
UIVisualEffectView
с пользовательской настройкой как -Выход: - для
blurEffect.setValue(1...
&blurEffect.setValue(2..
источник
(NSClassFromString("_UICustomVibrancyEffect") as! UIVibrancyEffect.Type).init()
Буду очень признателен за помощь!Вот простой способ добавить пользовательское размытие, не торгуясь с частными API, используя UIViewPropertyAnimator :
Сначала объявите свойство класса:
Затем установите вид размытия в
viewDidLoad()
:Примечание: это решение не подходит для
UICollectionView
/UITableView
клетокисточник
С Xcode вы можете сделать это легко. Следуйте инструкциям из xcode. Drage визуальный эффект просмотра на вашем uiview или imageview.
Удачного кодирования :)
источник
Принятый ответ правильный, но здесь пропущен важный шаг, в случае если это представление - для которого вы хотите размытый фон - представлено с использованием
[self presentViewController:vc animated:YES completion:nil]
По умолчанию это сведет на нет размытие, так как UIKit удаляет представление докладчика, которое вы фактически размываете. Чтобы избежать этого удаления, добавьте эту строку перед предыдущей
vc.modalPresentationStyle = UIModalPresentationOverFullScreen;
Или используйте другие
Over
стили.источник
Objective-C
SWIFT 3.0
от: https://stackoverflow.com/a/24083728/4020910
источник
Использование UIImageEffects
Для людей, которые хотят больше контроля, вы можете использовать
UIImageEffects
образец кода Apple .Вы можете скопировать код
UIImageEffects
из библиотеки разработчика Apple: размытие и тонировка изображенияА вот как это применить:
источник
источник
Обнаружил это случайно, дает мне действительно замечательные (почти дублирующие Apple) результаты и использует фреймворк Acceleration. - http://pastebin.com/6cs6hsyQ * Не написано мной
источник
Этот ответ основан на превосходном предыдущем ответе Mitja Semolic . Я преобразовал его в swift 3, добавил объяснение того, что происходит в комментариях, сделал его расширением UIViewController, чтобы любой VC мог вызывать его по желанию, добавил неокрашенное представление для отображения выборочного приложения и добавил блок завершения, чтобы вызывающий контроллер представления может делать все, что захочет, по завершении размытия.
Я подтвердил, что он работает как с iOS 10.3.1, так и с iOS 11
источник
Важное дополнение к ответу @ Джои
Это относится к ситуации, когда вы хотите представить размытый фон
UIViewController
сUINavigationController
.Наслаждайтесь!
источник
Swift 3 версия ответа Кева, чтобы вернуть размытое изображение -
источник
Код 2019
Вот более полный пример использования потрясающей техники @AdamBardon.
{В сторону: как общий вопрос разработки iOS,
didMoveToWindow
может быть более подходящим для вас, чемdidMoveToSuperview
. Во-вторых, вы можете использовать какой-то другой способ для удаления, но это две строки кода, показанные там.}BlurryBall
это простоUIVisualEffectView
. Обратите внимание на элементы для просмотра визуальных эффектов. Если вам понадобятся закругленные углы или что-то еще, сделайте это в этом классе.источник
Apple предоставила расширение для класса UIImage под названием UIImage + ImageEffects.h. В этом классе у вас есть нужные методы размывания вашего зрения
источник
Вот код Swift 2.0 для решения, которое было предоставлено в принятом ответе :
источник
Если добавить tableView для темного размытия, это будет красиво сделано:
источник
Вы можете сделать фоновое размытие напрямую, используя «Визуальный эффект с размытием» и «Визуальный эффект с размытием и яркостью».
Все, что вам нужно сделать для создания Blur Background в iOS-приложении, это ...
Шаг 1 Изображение
Шаг 2 Изображение
Макет приложения до нажатия на любую кнопку!
Представление приложения после нажатия на кнопку, которая делает весь фон приложения размытым!
источник
В случае, если это кому-нибудь поможет, вот быстрое расширение, которое я создал на основе ответа Джордана Х. Оно написано в Swift 5 и может использоваться из Цели C.
ПРИМЕЧАНИЕ. Если вы хотите размывать фон UILabel, не затрагивая текст, вы должны создать контейнер UIView, добавить UILabel в контейнер UIView в качестве подпредставления, установить для backgroundColor UILabel значение UIColor.clear, а затем вызвать blurBackground (style : UIBlurEffect.Style, fallbackColor: UIColor) для контейнера UIView. Вот быстрый пример этого, написанный в Swift 5:
источник
Свифт 4:
Чтобы добавить наложение или всплывающее представление. Вы также можете использовать представление контейнера, с помощью которого вы получаете бесплатный контроллер представления (вы получаете представление контейнера из обычной палитры / библиотеки объектов).
шаги:
Имейте представление (ViewForContainer на рисунке), которое содержит это представление контейнера, чтобы затемнить его при отображении содержимого представления контейнера. Подключите розетку внутри первого View Controller
Скрыть этот вид при загрузке 1-го ВК
Показать при нажатии кнопки введите описание изображения здесь
Чтобы затемнить это представление при отображении содержимого просмотра контейнера, установите для фона видов черный цвет, а для непрозрачности - 30%.
Я добавил ответ на создание представления в другом представлении в другом вопросе Stackoverflow https://stackoverflow.com/a/49729431/5438240
источник
Простой ответ - добавить подпредставление и изменить его альфа.
источник