CATransform3DR Применяемые эффекты исчезли после применения точки привязки
РЕДАКТИРОВАТЬ с правильным наблюдением.
Я использовал следующие два фрагмента для поворота UIImageView. После stage1 я получил желаемый 3D-эффект: вид вращался (3D-эффект) и растягивался (больший размер). На stage2 я пытаюсь повернуть правый обзор с шарниром справа.
Если бы я применил линию, которая изменяет опорную точку, вид будет качаться правильно (шарнир справа) с одной большой проблемой: размер вида восстанавливается до исходного размера (меньшего), в то время как трехмерный эффект (вращение) остается неизменным, а затем раскачка происходит.
Какие-либо предложения?
rightView.layer.anchorPoint = CGPointMake(1.0, 0.5);
-(void)stage1
{
[UIView animateWithDuration:1.5 animations:^{
rightView.transform = CGAffineTransformMakeTranslation(0,0); //rightView i UIImageView
CATransform3D _3Dt = CATransform3DIdentity;
_3Dt =CATransform3DMakeRotation(3.141f/42.0f,0.0f,-1.0f,0.0f);
_3Dt.m34 = -0.001f;
_3Dt.m14 = -0.0015f;
rightView.layer.transform = _3Dt;
} completion:^(BOOL finished){
if (finished) {
NSLog(@"finished..");
}
}];
}
-(void)Stage2
{
rightView.layer.anchorPoint = CGPointMake(1.0, 0.5); //issue?
rightView.center = CGPointMake(1012, 384);
[UIView animateWithDuration:1.75 animations:^{
CATransform3D rightTransform = rightView.layer.transform;
rightTransform.m34 = 1.0f/500;
rightTransform = CATransform3DRotate(rightTransform, M_PI_2, 0, 1, 0);
rightView.layer.transform = rightTransform;
} completion:^(BOOL finished) {
}];
}
1 ответ
Вам нужно добавить "опции" в анимацию с продолжительностью и добавить options:UIViewAnimationOptionBeginFromCurrentState
В противном случае это начинается с самого начала снова.
Итак, ваш этап 2 будет выглядеть так:
-(void)Stage2
{
rightView.layer.anchorPoint = CGPointMake(1.0, 0.5); //issue?
rightView.center = CGPointMake(1012, 384);
[UIView animateWithDuration:1.75
delay:0.00
options:UIViewAnimationOptionBeginFromCurrentState
animations:^{
CATransform3D rightTransform = rightView.layer.transform;
rightTransform.m34 = 1.0f/500;
rightTransform = CATransform3DRotate(rightTransform, M_PI_2, 0, 1, 0);
rightView.layer.transform = rightTransform;
} completion:^(BOOL finished) {
}];
}