Анимация изменения размера и перемещения UIView одновременно - PullRequest
5 голосов
/ 17 марта 2010

Я бы хотел «растянуть» UIView с правой стороны, то есть увеличить его frame.size.width на пиксели foo и в то же время уменьшить его frame.origin.x на пиксели foo, используя [UIView beginAnimations] синтаксис. Однако, если я это сделаю, когда анимация начинается, представление сразу же изменяет размер, а затем запускает анимацию для источника.

CGRect currFrame = someView.frame;
currFrame.size.width += 100;
currFrame.origin.x -= 100;

[UIView beginAnimations:@"Anim1" context:nil];
someView.frame = currFrame;
[UIView setAnimationDuration:0.7];
[UIView commitAnimations];

Я также пытался разбить анимацию на 2 части, но потом не могу удержать правильную позицию на месте.

Любая помощь очень ценится!

1 Ответ

4 голосов
/ 17 марта 2010

Возможно, вам придется перейти к базовой анимации и разбить ее на две явные анимации:

CABasicAnimation *stetchAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale.x"];
stetchAnimation.toValue = [NSNumber numberWithDouble:(someView.frame.size.width+100)/someView.frame.size.width];

CABasicAnimation *slideAnimation = [CABasicAnimation animationWithKeyPath:@"transform.translation.x"];
slideAnimation.toValue = [NSNumber numberWithDouble:-100];

CAAnimationGroup *animationGroup = [CAAnimationGroup animation];
animationGroup.animations = [NSArray arrayWithObjects:stetchAnimation,slideAnimation,nil];
animationGroup.removedOnCompletion = NO;
animationGroup.fillMode = kCAFillModeForwards;
animationGroup.duration = 0.7;

[someView.layer addAnimation:animationGroup forKey:@"animations"];
...