2016-10-06 7 views
5

У меня есть UITabBar, и я хочу сделать его размытым. Я написал следующий код:Почему я не могу размыть мой UITabBarController?

import UIKit 

class TabBarController:UITabBarController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     let blur = UIBlurEffect(style: UIBlurEffectStyle.Light) 
     let blurView = UIVisualEffectView(effect: blur) 
     blurView.frame = self.view.bounds 
     blurView.autoresizingMask = [.FlexibleWidth, .FlexibleHeight] 
     self.view.layer.insertSublayer(blurView, atIndex: 0) 
    } 

} 

но почему-то последняя строка бросает ошибку:

Cannot convert value of type 'UIVisualEffectView' to expected argument type 'CALayer'

как я могу исправить это?

Я изменил последнюю строку:

self.tabBar.addSubview(blurView) 

, но теперь весь TabBar размыто (даже с иконками, и они не видны). Когда я сменил эту строку на:

self.tabBar.sendSubviewToBack(blurView) 

затем таба видима, но не размыта. Я хочу добиться эффекта от принятого ответа отсюда Black background on transparent UITabBar, но здесь это uitabbar, и я использую uitabbarcontroller ... Можете ли вы помочь мне с применением размытия в моем случае?

+0

нечеткие или прозрачные? –

+0

@ Mr.Bista размыта с 'UIBlurEffectStyle.Light' :) – user3766930

+0

Можете ли вы добавить картинку своего раскадровки, пожалуйста? – kabiroberai

ответ

6

Вы просто добавить вид размытия как подвид:

self.view.addSubview(blurView) 

Поскольку вы просто хотите синей панели вкладок и этот класс является контроллер панели вкладок, вы можете сделать:

self.tabBar.addSubview(blueView) 

Вам также необходимо сменить рамку:

blurView.frame = self.tabBar.bounds 
+1

Спасибо, я пробовал первую строчку, и она работает, еще один вопрос - что вы подразумеваете под «отправкой на спину»? – user3766930

+2

Призыв к 'addSubView' добавит добавленный subview поверх любого существующего subviews. Если вам действительно нужно было добавить добавленное подвью для всех существующих подзонов, вам необходимо отправить его обратно. Но, похоже, вам здесь это не нужно. – rmaddy

+0

Хм, вы знаете, что, собственно, когда я добавил первую строку: 'self.view.addSubview (blurView)' и запустил проект - не только разметка табуляции, но ... все размыто (весь вид, сверху вниз внизу экрана). Как я могу размыть только нижнюю панель? – user3766930

3

Если я правильно понял из следующего комментария, который вы опубликовали, лет u хотите изменить цвет UITabBar, но все еще размыты.

And yes, I noticed that the UITabBarController is blurred by default, but I would like to make it blurred with specific style (.Dark).

Выполнение этого, так как iOS 7 действительно стало довольно простым. Просто измените barStyle вашего UITabBar на .black. Поместите следующий код в ваш метод viewDidLoad (обратите внимание, что UITabBar является полупрозрачным по умолчанию, поэтому вам не нужно указывать его снова).

tabBarController?.tabBar.barStyle = .black 

Если вы хотите, чтобы установить его на регулярный, белый barStyle, изменить его обратно в .default.

tabBarController?.tabBar.barStyle = .default 

Вы можете даже сделать это изнутри Interface Builder, выбрав панель вкладок в иерархии UITabBarController «s и изменение его Стиль к Black.

Tab Bar Style

3

почему бы вам не просто использовать свойство barTintColor на вашем TabBarController?

self.tabBar.translucent = true 
self.tabBar.barTintColor = UIColor.blackColor() 

Вам даже не требуется подкласс UITabBarController. Вы можете позвонить по этому номеру на любом UIViewController.

self.tabBarController?.tabBar.translucent = true 
self.tabBarController?.tabBar.barTintColor = UIColor.blackColor()