2014-11-04 4 views
3

Я пытаюсь добавить пользовательский вид внутри CALayer.Swift: добавить пользовательский вид внутри CALayer

http://i.imgur.com/sYzQ4kX.png

И я хочу, чтобы положить внутрь некоторых кнопок и надписей, но я боюсь, что я не в состоянии сделать это. Я делаю CALabel следующим образом:

func addRectangleToLayer(x: CGFloat, y: CGFloat, width: CGFloat, height: CGFloat, layer: CALayer, index: UInt32) { 
    var sublayer = CALayer() 
    sublayer.backgroundColor = UIColor.whiteColor().CGColor 
    sublayer.shadowOffset = CGSizeMake(0, 3); 
    sublayer.shadowRadius = 5.0; 
    sublayer.shadowColor = UIColor.blackColor().CGColor 
    sublayer.shadowOpacity = 0.8; 
    sublayer.cornerRadius = 12.0; 
    sublayer.frame = CGRectMake(x, y, width, height); 
    sublayer.borderColor = UIColor.blackColor().CGColor; 
    sublayer.borderWidth = 0.5; 

    //An example 
    let label = UILabel() 
    label.text = "LOREN" 
    sublayer.contents = label 

    layer.insertSublayer(sublayer, atIndex: index) 
} 

Можно ли сделать то, что я хочу?

Большое спасибо и извините за мой английский уровень

ответ

9

Если вы создаете UIView, вы будете иметь доступ к своей собственности layer для этой цели:

let label = UILabel() 
label.text = "LOREN" 
var sublayer = label.layer; 

// .. the rest of your layer initialization 
sublayer.backgroundColor = UIColor.whiteColor().CGColor 
sublayer.shadowOffset = CGSizeMake(0, 3); 
sublayer.shadowRadius = 5.0; 
sublayer.shadowColor = UIColor.blackColor().CGColor 
sublayer.shadowOpacity = 0.8; 
sublayer.cornerRadius = 12.0; 
sublayer.frame = CGRectMake(x, y, width, height); 
sublayer.borderColor = UIColor.blackColor().CGColor; 
sublayer.borderWidth = 0.5; 
// .. ended original source initialization 

layer.insertSublayer(sublayer, atIndex: index) 
+0

Это не работает для меня , Я замедляю метку, устанавливаю текст, извлекаю слой, добавляю этот labelLayer в CALayer, а затем вставляю CALayer в основной слой. Любая помощь? – asensionacher

+0

Почему вы устанавливаете 'labelLayer.contents =" HOLA "'? Это заменит содержимое вашего слоя (т. Е. CGImage слоя) на строку. –

+0

Я хочу добавить только текст внутри CALayer только для попытки. Как добавить только ярлык или несколько представлений? – asensionacher