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

Предупреждение Xcode: "Это приведет к появлению эффекта, пока непрозрачность не вернется к 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.

Я не мог понять, почему это предупреждение существует и как я могу правильно установить это свойство альфа.

4b9b3361

Ответ 1

Насколько я помню, вы не можете изменить альфа зрения визуального эффекта. Альфа всегда должна быть одной.

Ответ 2

Вопрос в том, что вы хотите оживить. Если это эффект, вы не можете анимировать его с помощью свойства 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, поскольку он скорее всего не то, что вы хотите.

Ответ 3

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

Эффект Vibrancy должен быть выбран в параметрах View Effect View выше.

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

enter image description here

Ответ 4

user1179321 определенно правильный. Согласно документации UIVisualEffectView;

При использовании класса UIVisualEffectView избегайте альфа-значений, которые менее 1. Создание представлений, которые являются частично прозрачными, вызывает системы для объединения представления и всех связанных с ним представлений во время offscreen render pass. Объекты UIVisualEffectView должны быть объединены как часть содержимого, которое они накладывают сверху, чтобы посмотреть верный. Установка альфа-функции менее 1 на визуальный эффект или любое из его наблюдений вызывает много эффектов, которые выглядят некорректно или нет вообще не отображаются.

https://developer.apple.com/library/ios/documentation/uikit/reference/UIVisualEffectView/index.html

Ответ 5

Мое решение:

  • Дублируйте слой за визуальным эффектом. (В моем случае UIImageView)
  • Анимирует альфа-значение дублированного представления. (например, альфа-форма от 1 до 0, показывает размытое изображение).

Ответ 6

Если вы представляете viewcontroller модально, установите флажок отключить анимацию в segue.

Ответ 7

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

 dispatch_async(dispatch_get_main_queue(), ^(void){
    [self presentViewController:yourPopoverr animated: YES completion: nil];
  });