2016-08-31 2 views
6

В настоящее время я использую UIVisualEffectView для нанесения размытия на изображение.Как можно изменить размытость UIVisualEffectView при перетаскивании в iOS?

У меня есть UIScrollView. Когда я нажимаю на scrollView, в моем методе «scrollViewDidScroll» я меняю альфу UIVisualEffectView. Текущее поведение этого заключается в том, что радиус размытия изменяется плавно, когда я перетягиваюсь в представлении.

Проблема, конечно, я не должен делать это. Получение предупреждений об изменении альфа-значения UIVisualEffectView.

Я видел, как люди говорят, чтобы сделать плавный переход размытия с использованием анимации, как этот здесь: How to fade a UIVisualEffectView and/or UIBlurEffect in and out?

Однако, я не все, что позволяет мне сделать это во время видел, скажем, пан- жест или что-то в этом роде. Я имею в виду, если бы я настроил анимацию с временной суммой, все хорошо. Но делать это во время перетаскивания?

ответ

7

Существует способ :)

Как вы заметили, вы можете анимировать от nil эффекта к эффекту, как UIBlurEffectStyleDark так, если мы добавим анимацию, а затем пауза анимации в уровн мы можем контролировать ход эффект, отрегулировав слой timeOffset!

- (void) setupBlur { 
    // Setup the blur to start with no effect 
    self.blurredEffectView = [[UIVisualEffectView alloc] initWithEffect:nil]; 

    // Add animation to desired blur effect 
    [UIView animateWithDuration:1.0 animations:^{ 
     [self.blurredEffectView setEffect:[UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]]; 
    }]; 

    // Pause layer animations 
    self.blurredEffectView.layer.speed = 0; 
} 

Регулировка размытия между 0.0 и 1.0 (продолжительностью анимации):

- (void) adjustBlur:(CGFloat)blurIntensity { 
    self.blurredEffectView.layer.timeOffset = blurIntensity; 
} 
  • Примечания: это не будет работать на 8 прошивке, где UIBlurEffect анимация не поддерживается.
+1

Благодарим за это. Это было именно то, что я искал! –

+1

: D Дополнительная заметка: иногда кажется, что анимация не будет работать до тех пор, пока в иерархию представлений не будет добавлен под просмотр UIVisualEffectView. Я обычно создаю экземпляр и добавляю размытие в 'viewDidLoad' и добавляю анимацию позже в' viewDidAppear: '. – Warpling

+0

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

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