Iphone 3d анимация - PullRequest
       12

Iphone 3d анимация

1 голос
/ 16 декабря 2009

Я недавно опубликовал свою проблему, но не получил ответ ни здесь, ни где-либо еще, и я не могу найти свой пост снова ... В любом случае, я хочу попытаться прояснить свою точку зрения, надеясь, что в этот раз вы сможете мне помочь.

Часть кода, о которой идет речь, выглядит следующим образом:

CABasicAnimation *animation = nil; 
CATransform3D transform;

animation = [CABasicAnimation animationWithKeyPath:@"transform"];

transform = CATransform3DMakeRotation(1.57f, 0.0f, 1.0f, 0.0f); 
value = [NSValue valueWithCATransform3D:transform]; 
[animation setToValue:value];
[animation setAutoreverses:YES]; 
[animation setDuration:0.5f];
[[shieldView layer] addAnimation:animation forKey:@"180"];

Что происходит, у меня есть UIImageView с изображением в нем. Я беру этот вид и поворачиваю его вокруг оси z на пол-оборота (1,57 по дуге).

Теперь есть еще один вид, перекрывающийся с тем, который трансформируется в 3d. Это приводит к моей проблеме: как только преобразование выполнено, преобразованный слой отсекается от перекрывающегося вида, но это неправильно, так что вы видите «мерцающий» эффект для обоих видов.

Теперь я не знаю, почему это происходит. Я ожидал бы, что представление будет анимировано надлежащим образом, без этой «ошибки», и представления будут просто отображаться правильно…, поскольку я не делаю ничего особенного.

Я пытался наложить 2D-преобразования, используя контекст «beginAnimations» и «commitAnimations», который отлично работает. Это означает, что проблема как бы скрыта в трехмерном вращении моего просмотра.

Ребята, у вас есть какие-нибудь подсказки по этому поводу? Надеюсь, я объяснил это достаточно хорошо.

1 Ответ

4 голосов
/ 17 декабря 2009

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

shieldView.layer.zPosition = 1.0f;

слой вашего shieldView должен быть немного выше слоя другого вида (если я не запомнил неправильное пространство координат, и оно должно быть -1.0f), и вы сможете избежать отсечения, которое вы видите сейчас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...