我希望视图的顶部在快速动画中与视图的底部相遇,以使其消失。(最好让它先生长第二个。)
我该怎么做呢?UIView 设置了一个背景图案[UIColor colorWithPattern:]
,当我这样做时self.textOptionsPopover.transform = CGAffineTransformMakeScale(0.0, 0.5);
,它就完全消失了。
我希望视图的顶部在快速动画中与视图的底部相遇,以使其消失。(最好让它先生长第二个。)
我该怎么做呢?UIView 设置了一个背景图案[UIColor colorWithPattern:]
,当我这样做时self.textOptionsPopover.transform = CGAffineTransformMakeScale(0.0, 0.5);
,它就完全消失了。
您有错误的 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;
您可以更改帧大小并为其设置动画。例如
假设 finalFrameSize 是一个 CGRect 的最终值,你可以得到这样的动画效果。
[UIView animateWithDuration:0.3f
animations:^{
currentView.frame = finalFrameSize;
}
completion:^(BOOL finished){
// Do something after the animation is comlete
}];