Подтвердить что ты не робот

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

Я пытаюсь создать контроллер, который будет похож на Control Center в iOS7. С сеанса WWDС# 226 Я узнал, как получить размытое изображение с различными эффектами.

UIGraphicsBeginImageContextWithOptions(image.size, NULL, 0);

[view drawViewHierarchyInRect:rect];

UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

lightImage = [newImage applyLightEffect];

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

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

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

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

4b9b3361

Ответ 1

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

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

Update:

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

2. FXBlurView.

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

FBBlurView effect

Ответ 2

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

Ответ 3

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

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

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

visualEffectView.frame = MYview.bounds;
[MYview addSubview:visualEffectView];

Ответ 4

Я нашел LiveFrost отличным и легко интегрировать проект для живого размытия.

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

Ответ 5

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

Перетащите визуальный эффект с помощью размытия на раскадровку. Желаемый эффект может быть достигнут путем установки альфа BACKGROUND COLOR. Подразделы должны быть добавлены в представление визуального эффекта, и на них не влияет размытие фона.

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

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

Ответ 6

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