3

我希望视图的顶部在快速动画中与视图的底部相遇,以使其消失。(最好让它先生长第二个。)

我该怎么做呢?UIView 设置了一个背景图案[UIColor colorWithPattern:],当我这样做时self.textOptionsPopover.transform = CGAffineTransformMakeScale(0.0, 0.5);,它就完全消失了。

4

2 回答 2

4

您有错误的 x 比例参数 -CGAffineTransformMakeScale(0.0, 0.5) 更改为CGAffineTransformMakeScale(1.0, 0.5),因为您不想修改宽度。

0.0 是您的视图消失的原因。

但是,如果您希望先让它增长一段时间,使用 CAKeyframeAnimation 会更容易——您可以轻松控制关键时间、值和计时功能。例如,您可以执行以下操作:

CAKeyframeAnimation *shrinkAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform"];
shrinkAnimation.values = [NSArray arrayWithObjects:
                          [NSValue valueWithCATransform3D:CATransform3DMakeScale(1.0, 1.0, 1.0)],
                          [NSValue valueWithCATransform3D:CATransform3DMakeScale(1.0, 1.4, 1.0)],
                          [NSValue valueWithCATransform3D:CATransform3DMakeScale(1.0, 0.0, 1.0)],
                          nil];
shrinkAnimation.keyTimes = [NSArray arrayWithObjects:@0.0, @0.2, @1.0, nil];
shrinkAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
shrinkAnimation.duration = 0.4;
shrinkAnimation.removedOnCompletion = NO;
shrinkAnimation.fillMode = kCAFillModeForwards;
[self. textOptionsPopover.layer addAnimation:shrinkAnimation forKey:@"shrink"];

编辑:如果您希望视图“从上到下”缩小,只需更改图层的锚点(记住更改锚点会更改框架!):

CGRect frame = self.textOptionsPopover.layer.frame;
self.textOptionsPopover.layer.anchorPoint = CGPointMake(0.5, 1.0);
self.textOptionsPopover.layer.frame = frame;
于 2013-05-29T23:34:24.310 回答
0

您可以更改帧大小并为其设置动画。例如

假设 finalFrameSize 是一个 CGRect 的最终值,你可以得到这样的动画效果。

 [UIView animateWithDuration:0.3f
                  animations:^{
                                 currentView.frame = finalFrameSize;
                             }
                             completion:^(BOOL finished){
                                 // Do something after the animation is comlete
                             }];
于 2013-05-29T23:24:32.363 回答