IOS 7 динамический эффект размытия, как в Центре управления
Я пытаюсь создать контроллер, который будет похож на Control Center в iOS7. С сеанса WWDС# 226 Я узнал, как получить размытое изображение с различными эффектами.
UIGraphicsBeginImageContextWithOptions(image.size, NULL, 0);
[view drawViewHierarchyInRect:rect];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
lightImage = [newImage applyLightEffect];
Итак, другими словами, мы просто фиксируем изображение (делаем снимок экрана), выполняем эффект размытия и используем это размытое изображение для наших нужд.
Но если вы откроете центр управления над каким-то динамическим контентом, вы заметите, что размытый фон центра управления меняется, а также содержимое.
Кто-нибудь знает, как воспроизвести это поведение?
Единственное, что я вижу, это захват контента и эффект размытия с некоторым интервалом (например, половина секунды). Но он выглядит излишним.
Ответы
Ответ 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