2017-08-07 60 views
1

三個圖層被賦予相同的父級,但是要添加的第一個圖層上的zPosition值不起作用 - 它保留在後面。爲什麼是這樣?我正在閱讀的書說,sublayer數組中的位置可以用zPosition值覆蓋。圖層z位置沒有效果

import UIKit 
import PlaygroundSupport 

extension CGRect { 
    init(_ x:CGFloat, _ y:CGFloat, _ w:CGFloat, _ h:CGFloat) { 
     self.init(x:x, y:y, width:w, height:h) 
    } 
} 

let v0 = UIView(frame: CGRect(0, 0, 500, 500)) 
v0.backgroundColor = .white 

let v1 = UIView(frame: v0.frame) 

let lay1 = CALayer() 
lay1.backgroundColor = UIColor(red: 1, green: 0.4, blue: 1, alpha: 1).cgColor 
lay1.frame = CGRect(113, 111, 132, 194) 
lay1.zPosition = 100 
v1.layer.addSublayer(lay1) 

let lay2 = CALayer() 
lay2.backgroundColor = UIColor(red: 0.5, green: 1, blue: 0, alpha: 1).cgColor 

lay2.frame = CGRect(41, 56, 132, 194) 
v1.layer.addSublayer(lay2) 

let lay3 = CALayer() 
lay3.backgroundColor = UIColor(red: 1, green: 0, blue: 0, alpha: 1).cgColor 
lay3.frame = CGRect(43, 197, 160, 230) 
v1.layer.addSublayer(lay3) 

v0.addSubview(v1) 

PlaygroundPage.current.liveView = v0 
+0

如果您設置其他zposition,該怎麼辦?對於第2層,「lay2.zPosition = 90」和第3層「lay3.zPosition = 80」? – GIJOW

+0

你有沒有嘗試重構使用'view.bringSubview(toFront:)'?看起來像是應該工作。 – dfd

+0

@GIJOW不,這不能解決它。 –

回答

2

我認爲你的代碼按預期工作。我只是將視圖的顏色更改爲

lay1.backgroundColor = UIColor.green.cgColor 
lay2.backgroundColor = UIColor.blue.cgColor 
lay3.backgroundColor = UIColor.red.cgColor 

這是輸出。您可以看到具有z位置的綠色視圖(lay1)位於頂部。

enter image description here

而且,很開心在這裏玩文字:

enter image description here

+0

這不是在這裏工作! –

+0

@IanWarburton:你的意思是輸出與預期不符? –

+0

嘗試捕獲衍生數據,從模擬器/設備上卸載應用程序,然後再試一次 –

0

代碼將按預期在一個應用程序。似乎這是Playground的問題。