У меня есть вопрос о применении нескольких преобразований к UIView. Когда я анимирую вращение UIView вокруг его центральной точки, например, а затем пытаюсь повернуть его вокруг точки, которая находится за его пределами, после этого вторая анимация все испортилась, например, он колеблется или вращается совершенно иначе, чем указано. Как сделать так, чтобы первая анимация не влияла на вторую, но все еще присутствовала при воспроизведении второй?
РЕДАКТИРОВАТЬ: Вот код. Сначала я поворачиваю вид вокруг его центральной точки:
CALayer *layer = view.layer;
CATransform3D aTransform = CATransform3DIdentity;
CGFloat zDistance = 2000;
aTransform.m34 = 1.0 / -zDistance;
scrollView.layer.sublayerTransform = aTransform;
CGFloat subviewX = 0.5;
CGFloat subviewY = 0.5;
[self setAnchorPoint:CGPointMake(subviewX, subviewY) forView:view];
CATransform3D bTransform = CATransform3DIdentity;
CABasicAnimation *rotateAnim = [CABasicAnimation animationWithKeyPath:@"transform"];
rotateAnim.fromValue= [NSValue valueWithCATransform3D:bTransform];
bTransform = CATransform3DRotate(aTransform,-20*M_PI/180, 1, 1, 0);
rotateAnim.duration=0.05;
rotateAnim.toValue=[NSValue valueWithCATransform3D:bTransform];
layer.transform = bTransform;
[layer addAnimation:rotateAnim forKey:nil];
Теперь, когда слой повернут, я хочу перевернуть его вокруг левой границы экрана:
CALayer *layer = view.layer;
CATransform3D aTransform = CATransform3DIdentity;
CGFloat zDistance = 2000;
aTransform.m34 = 1.0 / -zDistance;
tileScrollView.layer.sublayerTransform = aTransform;
CGFloat subviewX = ((1/view.frame.size.width)*(view.frame.origin.x));
CGFloat subviewY = 0.5;
[self setAnchorPoint:CGPointMake(-subviewX, subviewY) forView:view];
CATransform3D bTransform = layer.transform;
CABasicAnimation *rotateAnim = [CABasicAnimation animationWithKeyPath:@"transform"];
rotateAnim.fromValue= [NSValue valueWithCATransform3D:bTransform];
bTransform = CATransform3DMakeRotation(-M_PI_2, 0, 1, 0);
rotateAnim.duration=0.2;
rotateAnim.toValue=[NSValue valueWithCATransform3D:bTransform];
layer.transform = bTransform;
[layer addAnimation:rotateAnim forKey:nil];
Поскольку я хочу, чтобы повернутый слой переворачивался, я положил CATransform3D bTransform = layer.transform
вместо CATransform3D bTransform = CATransform3DIdentity
в начале второй анимации, но опять же, это только испортило анимацию
Другая, похожая проблема, с которой я столкнулся, заключается в том, что у меня есть UIView, который содержит 9 подвидов, один из которых переворачивает свою центральную точку каждую секунду. Но каждый раз, когда я применяю преобразование к superView этих 9 UIViews, компоновка subViews портится. Кто-нибудь знает, как это предотвратить? Любая помощь будет принята с благодарностью. Заранее спасибо!