Ответ 1
Насколько я помню, вы не можете изменить альфа зрения визуального эффекта. Альфа всегда должна быть одной.
У меня есть прототип ячейки, и я положил UIVisualEffectView
внутри ContentView
. Визуальный эффект. Стиль размытия - темный, а Vibrancy выключен. Затем я установил альфа зрения визуального эффекта в 0,5, используя IB.
Затем во время выполнения появляется предупреждение, в котором говорится:
<UIVisualEffectView ...> is being asked to animate its opacity. This will cause the effect to appear broken until opacity returns to 1.
Я не мог понять, почему это предупреждение существует и как я могу правильно установить это свойство альфа.
Насколько я помню, вы не можете изменить альфа зрения визуального эффекта. Альфа всегда должна быть одной.
Вопрос в том, что вы хотите оживить. Если это эффект, вы не можете анимировать его с помощью свойства alpha
. Однако, начиная с iOS 9, вы можете анимировать его с настройкой эффекта в блоке анимации.
UIVisualEffectView* view = [[UIVisualEffectView alloc] initWithFrame:self.view.bounds];
view.effect = nil;
[UIView animateWithDuration:0.3 animations:^{
view.effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark];
}];
В качестве альтернативы вы можете анимировать эффект, оживляя альфу представления оболочки, как предложено в других ответах (работает даже на iOS 8).
Если вы хотите анимировать содержимое визуального эффекта (подвид), анимируйте свойство contentView
(которое вы должны использовать для добавления подсмотров представления эффекта).
[UIView animateWithDuration:0.3 animations:^{
view.contentView.alpha = 1.0;
}];
Итак, чтобы подвести итог, вы никогда не должны изменять альфа самого UIVisualEffectView, поскольку он скорее всего не то, что вы хотите.
Желаемый эффект можно достичь, установив альфа цвет фона, а не визуальный эффект. Подразделы должны быть добавлены в представление визуального эффекта, и на них не влияет размытие фона.
Эффект Vibrancy должен быть выбран в параметрах View Effect View выше.
Смотрите изображение:
user1179321 определенно правильный. Согласно документации UIVisualEffectView;
При использовании класса UIVisualEffectView избегайте альфа-значений, которые менее 1. Создание представлений, которые являются частично прозрачными, вызывает системы для объединения представления и всех связанных с ним представлений во время offscreen render pass. Объекты UIVisualEffectView должны быть объединены как часть содержимого, которое они накладывают сверху, чтобы посмотреть верный. Установка альфа-функции менее 1 на визуальный эффект или любое из его наблюдений вызывает много эффектов, которые выглядят некорректно или нет вообще не отображаются.
https://developer.apple.com/library/ios/documentation/uikit/reference/UIVisualEffectView/index.html
Мое решение:
Если вы представляете viewcontroller модально, установите флажок отключить анимацию в segue.
Вы никогда не знаете, достаточно ли задержки. поэтому немного более чистого решения - просто выполнить презентацию в следующем цикле выполнения.
dispatch_async(dispatch_get_main_queue(), ^(void){
[self presentViewController:yourPopoverr animated: YES completion: nil];
});