2010-08-21 3 views
2

Я не понимаю, как изменить zPosition на вид, я стараюсь это, но ничего не происходит:Как изменить 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 это не говорит, что-то должно быть сделано, прежде чем использовать это свойство. Кто-нибудь знает, что мне не хватает?

Thanks, Vincent.

+0

Возможно, вам стоит объяснить, что вы действительно хотите совершить, т. Е. Как вы думаете, чтобы решить, изменив zPosition? – DarkDust

+0

Я хочу анимировать это свойство, чтобы некоторые CATextLayer перемещались из фона на передний план. Я думаю, что я могу добиться того же результата с помощью свойства transform этого слоя, но я хотел бы знать, как использовать этот zProperty. – vdaubry

ответ

10

Для свойства zPosition свойства, влияющего на относительное позиционирование слоев, все слои должны быть братьями и сестрами друг друга. То есть, это не будет работать между различными уровнями иерархии представления или уровня, но будет работать с теми, кто находится на одном уровне иерархии. Например, вы не можете позиционировать представление под своим супервизором, используя это.

В любом случае, я не думаю, что вы увидите плавную анимацию, которую вы хотели бы от фона до переднего плана, используя свойство zPosition. В тот момент, когда уровень выше в относительном положении Z, чем в другом слое, он появляется на экране. Даже если вы анимируете позицию Z, вы все равно увидите мгновенное изменение, когда один уровень пройдет другой. Вам может потребоваться вручную активировать непрозрачность слоя, а затем вернуться, чтобы добиться более плавного перехода от фона на передний план.

Если вы предпочитаете какую-либо перспективу для вашей укладки слоев и относительного позиционирования, см. Ответы на this question.

+0

У вас есть трещина в [мой родственный вопрос?] (Http://stackoverflow.com/questions/5466116/layer-zposition-does-not-work-with-non-sibling-uiviews) Thx. – iPadDeveloper2011

0

Вы можете легко анимировать zPosition property of CALayer используя UIView.transitionWithView().

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 
    ) 
} 
Смежные вопросы