2015-12-09 4 views
0

Я использую Swift 2 и Xcode 7.эффект размытия - фон UITextField

Я хотел бы, чтобы размыть на фоне моего UITextField. Я не нашел свойство backgroundView. Только background (для фонового изображения) или backgroundColor.

Я бы пришел, чтобы добавить представление в фоновом режиме. Но я не знаю, как сделать UITextField.

У вас есть решение?

+0

Если вы хотите, чтобы люди помогли вам, просто приложите немного усилий на свой вопрос –

ответ

3

Вы можете добавить только некоторый вид, чтобы сделать его размытым. Теперь проблема в том, что текстовые поля не имеют свойства backgroundView, но у них есть свойство фона, где мы можем установить UIImage. Поэтому мы можем сделать UIImage от UIView

Этот метод создаст UIImage для пройденного UIView.

func imageWithView(view:UIView)->UIImage{ 
     UIGraphicsBeginImageContextWithOptions(view.bounds.size, false, 0.0) 
     view.layer.renderInContext(UIGraphicsGetCurrentContext()!) 
     let image = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 
     return image 
    } 

Теперь мы будем использовать UIBlurEffect и UIVisualEffectView, которые доступны для прошивки 8+

//only apply the blur if the user hasn't disabled transparency effects 
if !UIAccessibilityIsReduceTransparencyEnabled() { 
    let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.Light) 
    //you can try for more values like .ExtraLight and .Dark 

    let blurEffectView = UIVisualEffectView(effect: blurEffect) 
    blurEffectView.frame = textField.bounds 
    blurEffectView.autoresizingMask = [.FlexibleWidth, .FlexibleHeight] 
    textField.backgroundColor = UIColor.clearColor() 

    //Set the blurred image made from blurred view as textfield's background 
    textField.background = imageWithView(blurEffectView) 
} 

Для Swift 3.0

func imageWithView(view:UIView)->UIImage { 
     UIGraphicsBeginImageContextWithOptions(view.bounds.size, false, 0.0) 
     view.layer.render(in: UIGraphicsGetCurrentContext()!) 
     let image = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 
     return image! 
} 

if !UIAccessibilityIsReduceTransparencyEnabled() { 
    let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.light) 
    //you can try for more values like .extraLight and .dark 

    let blurEffectView = UIVisualEffectView(effect: blurEffect) 
    blurEffectView.frame = textField.bounds 
    blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight] 
    textField.backgroundColor = UIColor.clear 

    //Set the blurred image made from blurred view as textfield's background 
    textField.background = imageWithView(view: blurEffectView) 
} 

Вот скриншот прилагается

enter image description here

Надеется, что это помогает

1

У вас есть решение?

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

0

Вы можете установить белый цвет фона, и изменить его значение альфа:

myTextField.alpha = 0.5; 

Наверное не совсем то, что вы просили, но гораздо проще в реализации.

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