2015-04-17 2 views
0

У меня есть UITabBar, с разделами «main» и «profile». В профиле я использую фоновое изображение, заполняющее весь экран, с эффектом размытия. Он работает очень хорошо. Когда я возвращаюсь к основному и снова возвращаюсь к профилю, новый эффект размытия добавляется в течение первого эффекта размытия.Размытие дубликатов каждый раз, когда я открываю вид

Если я поместил код, соответствующий заданному эффекту размытия, в viewDidLoad(), он отлично работает, эффект добавляется только один раз. Но есть проблема, эффект размытия не заполняет весь экран. Я предполагаю, что это вызвано тем, что в viewDidLoad никто не знает рамки imageView, поэтому он заполняет 3/4 части изображения.

Мой вопрос: как я могу это исправить? предположив, что это вызвано из-за рамки изображения, которая пока неизвестна. Как установить параметры кадра?

Если вы считаете, что это вызвано другой вещью, скажите мне, что может быть.

Это код размытия, который я использую?

self.picBlurView = UIVisualEffectView(effect: self.picBlur) 
self.picBlurView.frame = self.profileSubView.bounds  
self.profileSubView.addSubview(self.picBlurView) 

Большое спасибо.

+0

Изменение размера blurView в didlayoutПосмотры после автоматического макета применили его изменения. – TheCodingArt

ответ

1

Поскольку у вас уже есть picBlurView как свойство, просто проверить, если он существует. Если этого не существует, создайте его и добавьте. В противном случае ничего не делать. Сделайте это в viewWillAppear.

if (self.picBlurView == nil){ 
    self.picBlurView = UIVisualEffectView(effect: self.picBlur) 
    self.picBlurView.frame = self.profileSubView.bounds 
    self.profileSubView.addSubview(self.picBlurView) 
} 

Вы, вероятно, хотите реализовать метод willAnimateRotationToInterfaceOrientation, так что вы можете повторно применить эффект размытия, когда вращение происходит, если это для вас важно. Здесь вы просто замените тот, который вы добавили первоначально.

1

Вы можете установить флаг в своем классе, например «_alreadyBlurred». Вы устанавливаете его на NO в viewDidLoad.

В viewWillAppear вы проверяете, есть ли flag == NO, если это так, вы делаете эффект размытия и устанавливаете flag = YES.

Тогда в следующем вызове он не добавит другого эффекта размытия, и в этом методе вы знаете рамку.

Код:

в viewWillAppear:

if (_myBlurView == nil) { 
    .... 
    // do blur effect and add 
    .... 
} 
+0

Большое спасибо. Я думаю, что это решение! но я не знаю, как установить флаг, и я не знаю, как это проверить! То, что я сделал, чтобы исправить это, - удалить из супервизора эффект размытия всякий раз, когда вид исчез, он работает, но я знаю, что это не то, как это нужно делать. –

+0

Обновлен мой ответ с демо-кодом. –

+0

Вам не нужно новое имущество. Просто используйте self.picBlurView. Если он не был создан, создайте и добавьте. –

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