2015-02-04 2 views
1

Я применил свою функцию applyVibrancy к методу viewDidLoad моего mainViewController для моего приложения «Сегодняшний вид».Как я могу отменить визуальный эффект Центра уведомлений (iOS) для определенного вида?

override func viewDidLoad() { 
    applyVibrancy() 
} 

func applyVibrancy() 
{ 
    let oldView = self.view 
    var effectView = UIVisualEffectView(effect: UIVibrancyEffect.notificationCenterVibrancyEffect()) 

    effectView.frame = oldView.bounds 
    effectView.autoresizingMask = oldView.autoresizingMask; 

    effectView.userInteractionEnabled = true  
    effectView.contentView.addSubview(oldView)   
    self.view.tintColor = UIColor.clearColor() 

    self.view = effectView 
} 

Это успешно применяет этот визуальный эффект ко всему моему виджету. Но я бы хотел, чтобы некоторые из моих вложенных представлений (Ярлыки, Кнопки, Изображения и т. Д.) Были повреждены этим эффектом NOT.

Как я могу это достичь?

ответ

2

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

Когда я запускаю свой код, я получаю черный экран.

UIVibrancyEffect усиливает и регулирует цвет содержания слоистых позади точки зрения, позволяя контент размещенный внутри contentView к становятся более яркими. Предполагается, что он будет размещен над или как подпрограмма , UIVisualEffectView, которая была настроена с помощью UIBlurEffect. Этот эффект влияет только на контент, добавленный в contentView.

notificationCenterVibrancyEffect является своего рода UIVibrancyEffect, но в вашем коде нет UIVisualEffectView с UIBlurEffect настроен, вы должны создать и разместить ваши effectView над этой точкой зрения или добавить свой effectView, как подвид из contentView этого вида. В противном случае вы не увидите никакой вибрации.

Вот несколько тестовых кодов.

let label = UILabel() 
label.frame = CGRectMake(0, 0, 130, 30) 
label.text = "Has Vibracy!" 

let effectView = UIVisualEffectView(effect: UIVibrancyEffect.notificationCenterVibrancyEffect()) 

effectView.frame = CGRectMake(0, 0, 130, 30) 
effectView.backgroundColor = UIColor.clearColor() 
effectView.userInteractionEnabled = true 

effectView.contentView.addSubview(label) 

let blurView = UIVisualEffectView(effect: UIBlurEffect(style: .Dark)) 
blurView.contentView.addSubview(effectView) 
blurView.frame = CGRectMake(80, 20, 130, 30) 

self.view.tintColor = UIColor.clearColor() 

let label1 = UILabel() 
label1.frame = CGRectMake(80, 60, 130, 30) 
label1.text = "No Vibracy!" 

self.view.addSubview(blurView) 
self.view.addSubview(label1) 
+0

Привет, gabbler. Я пытаюсь просто отменить эффект для некоторых видов внутри контейнера представления, который уже применил этот эффект. –

+0

После того как я применен, я не нахожу api, чтобы отменить его, но вы можете изменить структуры представления, пусть у self.view есть два контейнера представления, оба кадра - self.view.bounds, перемещают все подпункты, которые вы хотите отменить эффект, в контейнер A, другие подпункты к контейнеру B, применяют эффект к контейнеру B. – gabbler

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