Как изменить UIView zPosition? - PullRequest
       11

Как изменить UIView zPosition?

3 голосов
/ 21 августа 2010

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

Спасибо, Винсент.

Ответы [ 2 ]

11 голосов
/ 21 августа 2010

Чтобы свойство zPosition влияло на относительное расположение слоев, все слои должны быть родственными друг другу. То есть это не будет работать между различными уровнями иерархии представления или слоя, но будет работать с теми же уровнями иерархии. Вы не можете расположить представление под его суперпредставлением, используя это, например.

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

Если вместо этого вам нужна перспектива для укладки слоя и относительного позиционирования, см. Ответы на этот вопрос .

0 голосов
/ 05 мая 2016

Вы можете легко анимировать zPosition свойство 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
    )
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...