2015-09-25 4 views
2

У меня есть пользовательский компонент, сделанный после this учебник. Этот компонент является многоразовым, и мне нужно его фон прозрачным, но не подвиды (у меня есть три UIImageView, в нескольких UIButton и этикеткиПользовательский компонентный фон прозрачный

Я попытался это:.

self.view.backgroundColor = UIColor.purpleColor().colorWithAlphaComponent(0) 

Делая это, если Я устанавливаю альфа выше 0, фон становится фиолетовым, но если я устанавливаю альфа на 0, фон становится белым, а не прозрачным (изображение имеет фоновое изображение).

Может кто-нибудь мне помочь? .

EDIT:

Забыл сказать, что над представлением есть UIScrollView.

EDIT 2:

В ViewController для Main.storyboard:

self.view.backgroundColor = UIColor(patternImage: UIImage(named: "fondo")!) 

ДАЛЕЕ ОБЪЯСНЕНИЕ, по запросу:

Я создал пользовательский компонент, в своем собственном файле XIb, следуя Учебник, который я связал ранее.

Чтобы использовать его, я перетаскиваю объект View в main.storyboard и устанавливаю его класс в swift, который соответствует этому xib.

Итак, у меня есть ViewController для Main.storyboard и быстрый файл для xib, который соответствует моему настраиваемому компоненту. То есть два быстрых файла, один для Main.storyboard И один для пользовательского компонента .xib.

Я установил фоновое изображение в быстрый файл для Main.storyboard (ViewController.swift). Если я что-то сделаю, у меня есть свои пользовательские компоненты, но с белым фоном. Итак, я понял, "Мне нужно установить фон для пользовательского компонента (custoncomponcnt.swift) прозрачный"

КОД: Customview.swift

import UIKit 

@IBDesignable class CustomView: UIView { 

// Our custom view from the XIB file 
var view: UIView! 

@IBOutlet weak var label: UILabel! 
@IBOutlet weak var icono: UIImageView! 
@IBAction func onClick(sender: UIButton) { 
    println("button") 
} 
@IBInspectable var image: UIImage? { 
    get { 
     return icono.image 
    } 
    set(image) { 
     icono.image = image 
    } 
} 

@IBInspectable var text: String? { 
    get { 
     return label.text 
    } 
    set (text){ 
     label.text=text 
    } 
} 

func xibSetup() { 
    view = loadViewFromNib() 

    // use bounds not frame or it'll be offset 
    view.frame = bounds 

    // Make the view stretch with containing view 
    view.autoresizingMask = UIViewAutoresizing.FlexibleWidth | UIViewAutoresizing.FlexibleHeight 
    //self.view.backgroundColor = UIColor.purpleColor().colorWithAlphaComponent(0) 
    self.view.backgroundColor=UIColor.clearColor() 
    // Adding custom subview on top of our view (over any custom drawing > see note below) 
    addSubview(view) 

} 

func loadViewFromNib() -> UIView { 

    let bundle = NSBundle(forClass: self.dynamicType) 
    let nib = UINib(nibName: "CustomView", bundle: bundle) 
    let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView 

    return view 
} 
/* 
// Only override drawRect: if you perform custom drawing. 
// An empty implementation adversely affects performance during animation. 
override func drawRect(rect: CGRect) { 
    // Drawing code 
} 
*/ 

override init(frame: CGRect) { 
    // 1. setup any properties here 

    // 2. call super.init(frame:) 
    super.init(frame: frame) 

    // 3. Setup view from .xib file 
    xibSetup() 
} 

required init(coder aDecoder: NSCoder) { 
    // 1. setup any properties here 

    // 2. call super.init(coder:) 
    super.init(coder: aDecoder) 

    // 3. Setup view from .xib file 
    xibSetup() 
} 

} 

ViewController.swift:

import UIKit 

class ViewController: UIViewController { 

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.view.backgroundColor = UIColor(patternImage: UIImage(named: "fondo")!) 
    // Do any additional setup after loading the view, typically from a nib. 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 
} 
+0

пожалуйста, добавьте код для фонового изображения. –

+0

Не устанавливайте цвет фона после установки рисунка. См. Мой обновленный ответ. –

+0

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

ответ

1

Установите цвет UIColor.clearColor()

+1

Не работает ... фон белый. – Fustigador

+0

Huh. У вас есть более подробная информация? Были ли представления, созданные в IB? И действительно ли UIScrollView поверх (более высокого значения z), чем представление, которое вы пытаетесь сделать прозрачным? – dylanthelion

+0

Да, пользовательские представления создаются в xib, а ScrollView - за представлениями, которые я пытаюсь сделать прозрачными. – Fustigador

0

Используйте прозрачный цвет для прокруткиНазад фона

self.scrollView.backgroundColor = UIColor.clearColor() 

Вам не нужно устанавливать цвет фона для просмотра снова, как только вы установили цвет с образцом изображения. Если вы снова установите цвет фона, изображение рисунка будет удалено.

+0

Я устанавливаю цвет фона (тот, который мне нужен прозрачным) в xib для пользовательского представления, а не в ViewController Main.storyboard. Образ шаблона IS находится в ViewController Main.storyboard. – Fustigador

+0

Ваши требования кажутся неясными. Подумайте об обновлении своего вопроса более подробно, чтобы сделать его более понятным. –

0

В качестве варианта вы можете использовать UIWebView, чтобы использовать HTML-код, чтобы установить прозрачность там HTML-кода.

Для реализации UIWebView с прозрачным фоном все, что вам нужно сделать, это:

  1. Set BackgroundColor Свойство UIWebView «s к [UIColor clearColor].
  2. Использование содержимого UIWebView в HTML.
  3. Прозрачное имущество UIWebView установлено на NO.

PS: извлеченный из Using transparent background color in UIView by HTML code

+0

Это выглядит плохо для меня. Мне не нужно использовать UIWebView, чтобы сделать фон прозрачным ... и я сомневаюсь, что Apple разрешит мне опубликовать это. – Fustigador

+0

@Fustigador в любом случае, его способ, как это сделать (странный способ, но что угодно). Я попытаюсь найти другое решение – Beraliv

0

Я столкнулся с такой же проблемой (тот же учебник), как я установил его:

  1. добавить в методе xibSetup:

    вид. backgroundColor = UIColor (белый: 0.9, alpha: 1.0) // или любой цвет

  2. создание в UIViewControl ler:

    let noDataView = NoDataUIView (рамка: self.view. рамка)

    view.addSubview (noDataView)