kitoko552.memo

kitoko552のメモ

Swiftでsubviewsに影響が出ないようにviewを透過する

Swiftでは(Objective-cでも)、あるviewのalphaを直接操作してしまうと、そのviewのsubviewsもalphaの影響を受けてしまいます。

override func viewDidLoad() {
    super.viewDidLoad()
        
    let view1 = UIView(frame: CGRectMake(35, 50, 300, 500))
    view1.backgroundColor = UIColor.greenColor()
    view1.alpha = 0.2 // alphaを直接操作する
        
    let view2 = UIView(frame: CGRectMake(10, 10, 200, 400))
    view2.backgroundColor = UIColor.blueColor()
        
     // view1(緑)がview2(青)の親view
    view1.addSubview(view2)
    self.view.addSubview(view1)
}

f:id:kitoko552:20150625155258p:plain

上のような結果ではなく、subviewsは普通のalpha値のまま、親viewだけを透過したいときは、viewのbackgroundColorのalpha値を操作することで透過を実現します。

override func viewDidLoad() {
    super.viewDidLoad()
        
    let view1 = UIView(frame: CGRectMake(35, 50, 300, 500))
        
    // backgroundColorを使って透過させる。
    view1.backgroundColor = UIColor(red: 0, green: 1, blue: 0, alpha: 0.2)
        
    let view2 = UIView(frame: CGRectMake(10, 10, 200, 400))
    view2.backgroundColor = UIColor.blueColor()
        
    view1.addSubview(view2)
    self.view.addSubview(view1)
}

f:id:kitoko552:20150625155801p:plain

Xcode上でも同様に、backgroundColorのalpha値を操作することで、そのviewだけを透過させることができます。