2017-09-25 40 views
0

我創建一個的firstView類作爲UIView類和添加了一個容器添加一些層FUNC如何addSubLayer在夫特UIView類

import UIKit 
import QuartzCore 

class FirstView: UIView { 
    var container: UIView { 
     let x = CGFloat(0.0), 
     y = CGFloat(0.0), 
     w = CGFloat(screenWidth), 
     h = CGFloat(screenHeight - statusBarHeight) 
     let view = UIView(frame: CGRect(x: x, y: y, width: w, height: h)) 
     view.background(color: UIColor.red) 
     return view 
    } 

    var salamLogo: CALayer { 
     let layer = CALayer() 
     let view = UIImage(named: "sibdiet_logo")?.cgImage 
     let x = CGFloat(screenWidth/2 - 72.0), 
     y = CGFloat(20.0), 
     w = CGFloat(160.0), 
     h = CGFloat(160.0) 
     layer.frame = CGRect(x: x, y: y, width: w, height: h) 
     layer.contents = view 
     layer.contentsGravity = kCAGravityResizeAspect 
     return layer 
    } 

    override init(frame: CGRect) { 
     super.init(frame: frame) 
     initializeViews() 
    } 
    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
     initializeViews() 
    } 
    private func initializeViews(){ 
     container.layer.addSublayer(salamLogo) 
     addSubview(container) 
    } 

} 

層,例如salamLogo,和addSub層在initializeViews()的ViewController從的firstView類添加對象和addSubView

import UIKit 

var screenHeight: CGFloat = UIScreen.main.bounds.height 
let screenWidth: CGFloat = UIScreen.main.bounds.width 
let statusBarHeight = UIApplication.shared.statusBarFrame.height 

class ViewController: UIViewController { 

    var firstView: FirstView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     screenHeight = screenHeight == 812 ? 788 : UIScreen.main.bounds.height 

     firstView = FirstView(frame: CGRect(x: 0, y: statusBarHeight, width: screenWidth, height: screenHeight)) 
     self.view.addSubview(firstView) 

    } 
} 

在模擬器顯示一個紅色幀但不顯示salamLogo層,或者任何層成

回答

1

添加層中版本y類似於添加子視圖:

layer.addSublayer(salamLogo) 

但在你的情況下可能會更好地使用子視圖?我沒有看到在這裏使用圖層的任何目的。您可以salamLogo定期UIImageView

======編輯=====

返回到您的解決方案。你的代碼有問題。每次您撥打containersalamLogo您將創建新的UIView和新的CALayer。只保留一個實例,你應該做的:

lazy var container: UIView = { 
     let x = CGFloat(0.0), 
     y = CGFloat(0.0), 
     w = CGFloat(screenWidth), 
     h = CGFloat(screenHeight - statusBarHeight) 
     let view = UIView(frame: CGRect(x: x, y: y, width: w, height: h)) 
     view.background(color: UIColor.red) 
     return view 
    }() 

    lazy var salamLogo: CALayer = { 
     let layer = CALayer() 
     let view = UIImage(named: "sibdiet_logo")?.cgImage 
     let x = CGFloat(screenWidth/2 - 72.0), 
     y = CGFloat(20.0), 
     w = CGFloat(160.0), 
     h = CGFloat(160.0) 
     layer.frame = CGRect(x: x, y: y, width: w, height: h) 
     layer.contents = view 
     layer.contentsGravity = kCAGravityResizeAspect 
     return layer 
    }() 
+0

我有很多喜歡的形狀和梯度,我想加入到容器 – amin

+0

刪除容器和解決問題的層 – amin