同时动态调整和移动UIView的动画效果

5

我想要将一个UIView向右“伸展”,也就是通过[UIView beginAnimations]语法将它的frame.size.width增加foo像素,同时将它的frame.origin.x减少foo像素。 然而,如果我这样做,当动画开始时,视图立即调整大小,然后开始原点的动画。

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];

我也尝试将动画拆分为两部分,但是我无法保持正确的位置。

非常感谢任何帮助!


你找到解决办法了吗?我也遇到了同样的问题,但很奇怪,为什么视图会立即调整大小然后开始动画呢? - Raj Pawan Gumdal
1个回答

4

您可能需要降级到核心动画,并将其拆分为两个显式动画:

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"];

谢谢,但那会拉伸视图。我需要改变框架,以便可以相应地重新布局其子视图。基本上,这就像移动版Safari中搜索字段的行为(当您点击它时,它会向左展开)。 - user295423

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接