2010-08-21 76 views
2

我不知道如何更改視圖的z位置,我嘗試這一點,但什麼也沒有發生:如何更改UIView zPosition?

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    UIView *view = [[[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)] autorelease]; 
    view.backgroundColor = [UIColor blackColor]; 
    view.layer.zPosition = -400; 
    [self.view addSubview:view]; 
} 

在CALayer的文檔也沒有說什麼應該使用這個屬性之前完成。有誰知道我錯過了什麼?

謝謝, 文森特。

+0

也許你應該解釋一下你真正想完成的事情,即你認爲通過改變zPosition來解決什麼問題? – DarkDust 2010-08-21 09:13:00

+0

我想動畫這個屬性,以便一些CATextLayer從背景移動到前景。我想我可以達到與圖層的transform屬性相同的結果,但我想知道如何使用此zProperty。 – vdaubry 2010-08-21 09:51:56

回答

10

對於zPosition屬性對層的相對位置有影響,所有層必須是彼此的兄弟。也就是說,這在視圖或圖層層次結構的不同層次之間不起作用,但可以與處於同一級別層次結構的人員一起工作。例如,您無法使用此視圖在其超級視圖下方放置視圖。

無論如何,我不認爲你會看到使用zPosition屬性從背景到前景的那種平滑動畫。相對Z位置的圖層比另一個同級圖層高,它會彈出到屏幕上。即使您在Z位置設置了動畫效果,您仍然會看到瞬間的變化,因爲一層會通過另一層。您可能需要手動設置圖層的不透明度,然後返回,以實現從背景到前景的平滑過渡。

如果您想要對圖層堆疊和相對定位進行一些透視,請參閱對this question的回覆。

+0

關心在[我的相關SO問題?](http://stackoverflow.com/questions/5466116/layer-zposition-does-not-work-with-non-sibling-uiviews)Thx。 – iPadDeveloper2011 2011-03-28 23:17:12

0

您可以使用UIView.transitionWithView()輕鬆製作zPosition屬性CALayer

var isFirstViewOnTop = true 
func switchCards() { 
    self.isFirstViewOnTop = !self.isFirstViewOnTop 

    UIView.transitionWithView(
     self, 
     duration: 0.25, 
     options: .TransitionCrossDissolve, 
     animations: {() -> Void in 
      self.firstView.layer.zPosition = self.isFirstViewOnTop ? 1 : 0 
      self.secondView.layer.zPosition = !self.isFirstViewOnTop ? 1 : 0 
     }, 
     completion: nil 
    ) 
}