Как добавить размытый вид поверх вида? - PullRequest
12 голосов
/ 09 марта 2011

У меня есть NSTableView, который перезагружается. Пока загружаются новые данные, я хочу добавить к нему подпредставление с помощью спиннера. Я бы хотел, чтобы вид сверху был полупрозрачным, а вид под ним был размытым. Как бы я поступил так?

Ответы [ 4 ]

18 голосов
/ 10 марта 2011

Самое простое решение - значительно большее, чем -bitmapImageRepEtc:, и более применимое к Mac OS, чем метод масштабирования растеризации - состоит в том, чтобы настроить представление наложения на использование базового слоя Core Animation, а затем дать этому слою CoreФильтр размытия изображения.Это техника, используемая во всех Mac OS, от меню Dock до самой строки меню.Интерфейсный Разработчик упрощает настройку, но вы можете сделать это и в коде, например:

CALayer *backgroundLayer = [CALayer layer];
[backgroundView setLayer:backgroundLayer];
[backgroundView setWantsLayer:YES];

CIFilter *blurFilter = [CIFilter filterWithName:@"CIGaussianBlur"];
[blurFilter setDefaults];

[backgroundView layer].backgroundFilters = [NSArray arrayWithObject:blurFilter];
3 голосов
/ 25 октября 2013

Вы должны проверить RMBlurredView на guthub: https://github.com/raffael/RMBlurredView

Это простой в использовании подкласс NSView, который сделает все это за вас.Обязательно установите setWantsLayer:YES в родительском представлении!

Подробнее см. Статью о кокоанетике: http://www.cocoanetics.com/2013/10/blurring-views-on-mac/

2 голосов
/ 10 марта 2011

Основной метод заключается в том, чтобы привязать изображение вашего вида, используя что-то вроде ‑bitmapImageRepForCachingDisplayInRect: метода NSView, обработав это изображение, чтобы сделать его размытым (Core Image здесь ваш друг), а затем наложить ваш вид на NSImageView, содержащая размытое изображение.

Это, конечно, подделка, но вот что такое шоуменство: -)

0 голосов
/ 09 марта 2011

Вы пытались изменить атрибут Alpha для вида (для прозрачности)? Также вот ссылка на размытие вида: Эффект размытия для UIView

...