2014-10-12 13 views
27

У меня есть прототип ячейки, и я положил в его ContentView. Стиль размытия визуального эффекта - Темный, а Vibrancy выключен. Затем я установил альфа зрения визуального эффекта в 0,5, используя IB.Предупреждение Xcode: «Это приведет к появлению искажения, пока непрозрачность не вернется к 1»

Тогда во время выполнения, я получаю предупреждение, что говорит:

<UIVisualEffectView ...> is being asked to animate its opacity. This will cause the effect to appear broken until opacity returns to 1. 

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

+0

Fade в/из UIVisualEffectView - http://stackoverflow.com/a/31319366/194544 – beryllium

+0

Вы можете сделать это со снимками, и никогда не касайтесь вида непрозрачности размытия: http://stackoverflow.com/a/31708699/1633251 –

ответ

13

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

+5

Конечно, вы можете. Это может просто не дать желаемого эффекта. Однако во многих случаях это все равно будет просто рассматривать это как предупреждение. – sebrock

+11

Альфа визуального эффекта изменчива, но это предупреждение раздражает. –

5

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

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

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

+4

Как мы должны правильно изменить визуальный эффект размытия, если хотим, чтобы он был более прозрачным? –

7

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

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

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

enter image description here

+0

Стиль не отображается на XCode 6.1.1 – Caipivara

+0

Проверьте, проверено ли Vibrancy. Я обновил ответ :) –

+0

Этот результат в другом эффекте не так. Поскольку альфа-фон будет зависеть от того, что содержимое (если оно есть) будет отображаться при полной альте. – chakrit

1

Мое решение:

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

Вопрос в том, что вы хотите оживить. Если это эффект, вы не можете анимировать его через свойство alpha. Однако, начиная с iOS 9, вы можете анимировать его с настройкой эффекта в блоке анимации.

UIVisualEffectView* view = [[UIVisualEffectView alloc] initWithFrame:self.view.bounds]; 
view.effect = nil; 
[UIView animateWithDuration:0.3 animations:^{ 
    view.effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; 
}]; 

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

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

[UIView animateWithDuration:0.3 animations:^{ 
    view.contentView.alpha = 1.0; 
}]; 

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

0

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

+0

уточните свой ответ –

+0

, если вы представляете viewcontroller без анимации, вы можете анимировать свой фон uivisualeffectview вручную. – vanab

0

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^