2010-08-21 63 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 
    ) 
}