it-swarm.com.ru

iOS 7 динамический эффект размытия как в Центре управления

Я пытаюсь сделать контроллер, который будет похож на Центр управления в iOS7. Из сеанса WWDC № 226 я узнал, как получить размытое изображение с различными эффектами 

UIGraphicsBeginImageContextWithOptions(image.size, NULL, 0);

[view drawViewHierarchyInRect:rect];

UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

lightImage = [newImage applyLightEffect];

Другими словами, мы просто делаем снимок (делаем скриншот), выполняем эффект размытия и используем это размытое изображение для своих нужд.

Но если вы откроете центр управления над некоторым динамическим контентом, вы заметите, что размытый фон центра управления меняется так же, как и контент.

Кто-нибудь знает, как повторить это поведение?

Единственный способ увидеть это - захватить контент и создать эффект размытия с некоторым интервалом (например, полсекунды). Но это выглядит избыточно.

35
Nastya Gorban

Вот готовые решения, которые я нашел:

1. Самое неожиданное: используйте UIToolBar

- (id) initWithFrame:(CGRect)frame
{
    if ((self = [super initWithFrame:frame]))
    {
        [self setup];
    }
    return self;
}

- (id) initWithCoder:(NSCoder *)coder
{
    if ((self = [super initWithCoder:coder]))
    {
        [self setup];
    }
    return self;
}

- (void) setup
{
    if (iOS7OrLater)
    {
        self.opaque = NO;
        self.backgroundColor = [UIColor clearColor];

        UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:self.bounds];
        toolbar.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
        toolbar.barTintColor = self.tintColor;
        [self insertSubview:toolbar atIndex:0];
    }
}

UIToolbar может быть использован для этих нужд, потому что он имеет свой единственный встроенный механизм размытия, и этот механизм является динамичным, что хорошо. Но плохо в том, что по какой-то причине он игнорирует цвета и делает фон неприлично выглядящим ...

Toolbar effect

Обновление:

Чтобы избежать нарушения цвета, не используйте barTintColor. Вы также можете изменить стиль панели инструментов, если вы хотите размытие в темном стиле (используйте UIBarStyleBlack).

2. FXBlurView . 

В отличие от панели инструментов, он более позитивный, но его динамический механизм пока редок, и на самом деле его можно использовать только для статического фона. (динамический = НЕТ).

FBBlurView effect

43
Nastya Gorban

В iOS8 мы можем реализовать эффект размытия на видах, используя UIVisualEffect class. 

12
petesalt

Вы можете использовать приведенный ниже код, чтобы применить эффект размытия на виде.

UIVisualEffect *blurEffect;
blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];

UIVisualEffectView *visualEffectView;
visualEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];

visualEffectView.frame = MYview.bounds;
[MYview addSubview:visualEffectView];
7
Muhammad Rizwan

Я обнаружил, что LiveFrost отличный и простой в интеграции проект для размытия в реальном времени.

https://github.com/radi/LiveFrost/

2
rounak

Вы можете использовать UIVisualEffect из раскадровки.

Перетащите визуальный эффект с Blur на раскадровку. Желаемый эффект может быть достигнут путем установки альфа-цвета фона. Подвиды должны быть добавлены в View of Visual Effect View, и на них не влияет размытие фона.

Эффект вибрации должен быть выбран в параметрах просмотра выше.

Смотрите изображение: 

 

1
Sahil Kapoor

Использование навигационной панели для обеспечения размытия не будет работать на старых устройствах под управлением iOS 7. Поскольку они работают под управлением более легкой версии iOS 7 практически без

0
Atif Khan