2013-09-18 5 views
1

Я пытаюсь применить перспективное преобразование для моего объекта UIView с помощью следующего кода:Применить преобразование к UIView Самой

CATransform3D t = CATransform3DIdentity; 
t.m34 = -1.0/1000; 
t = CATransform3DRotate(t, angle, 0.0f, 1.0f, 0.0f); 

myView.layer.transform = t; 

, и я не вижу никакого эффекта вообще. Я пробовал другие преобразования как простой перевод, и они тоже не работают.

Однако, если я делаю одно из следующих двух модификаций, то он будет работать несколько, но ни удовлетворяет мой запрос:

  1. Изменение последней строки в

    myView.layer.sublayerTransform = т;

Этот вид работ, но он только преобразует subviews на myView, а не myView.

  1. Добавить код анимации, чтобы применить изменения, вместо того, чтобы непосредственно назначить изменения в слое:

    CABasicAnimation * turningAnimation = [CABasicAnimation animationWithKeyPath: @ "преобразования"]; turnAnimation.toValue = [Значение NSValueWATCATransform3D: t]; turnAnimation.delegate = self; turnAnimation.fillMode = kCAFillModeForwards; turnAnimation.removedOnCompletion = NO;

    [myView.layer addAnimation: turnAnimation forKey: @ "turn"];

Дело в том, что я не хочу анимацию.

Может ли кто-нибудь указать направление для меня?

Спасибо!

+1

Какой угол вы предоставили? – Krishnan

+0

Это произвольный угол, такой как 45.0f * M_PI/180.0 – CodePlumber

+1

Он работает для меня с любым произвольным углом ... – Krishnan

ответ

0

я понял, проблему после того, как тест Кришнан подтвердил, что сам layer.transform делает работу без помощи анимации или sublayerTransform , Проблема, с которой я столкнулся, была вызвана анимацией, которая была применена к слою моего представления и впоследствии не удалена. Поскольку эта анимация имела значение toValue, равное преобразованию идентичности, я не понимал, что он может фактически предотвратить последующие неанимированные преобразования от работы. Установка removedOnCompletion = YES (по умолчанию) в анимации разрешает тайну.

0

Вы должны иметь возможность использовать myView.transform = CGAffineTransformMakeRotation (угол). Он не будет анимировать свойство, если вы явно не укажете ему использование [UIView animateWithDuration:]. Использование свойства преобразования UIView в конечном итоге применит ваше преобразование к CALayer, поддерживающему UIView, поэтому я обязательно буду взаимодействовать только с преобразованиями на одном уровне (UIView или CALayer).

преобразование UIView документ: https://developer.apple.com/library/ios/documentation/uikit/reference/uiview_class/UIView/UIView.html#//apple_ref/occ/instp/UIView/transform

CGAffineTransform Doc:

https://developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CGAffineTransform/Reference/reference.html#//apple_ref/c/func/CGAffineTransformMakeRotation

+0

Спасибо за ваш ответ, но CGAffineTransform предназначен только для 2D линейного преобразования. Мне нужны 3D-проекции, такие как перспективное преобразование, которое я задал в вопросе. – CodePlumber

 Смежные вопросы

  • Нет связанных вопросов^_^