UIViewAnimationCurve 只有
这些功能。
但是,我需要像UIView的 ExpoOut , BackInOut 动画。
像ExpoOut一样是[CAMediaTimingFunction functionWithControlPoints:0.12 :0.51 :-0.4 :1];
我使用了 CABasicAnimation ,但它不能像UIView动画那样改变 frame ,更改视图大小时非常糟糕。
或者,您是否有更好的方法来更改视图框架,就像真实一样,而不是像zoomin。
感谢。
答案 0 :(得分:3)
这里的问题是无法为基于UIView的动画指定计时功能。据我所知,你会留下一些令人不快的选择:
我通过在动画制作之前将委托设置为nil并在之后设置回UIView来破解我的方式,但感觉非常脏。不过,我可能会遗漏一些东西。我的代码看起来像这样:
- (void)methodThatAnimates {
[CATransaction begin]; {
/* Must set to nil, otherwise the view just jumps to the new location. */
self.viewToAnimate.layer.delegate = nil;
CAMediaTimingFunction *timingFunction =
[CAMediaTimingFunction functionWithControlPoints:0.4 :0 :0 :1.0];
[CATransaction setAnimationTimingFunction:timingFunction]
self.viewToAnimate.layer.position = CGPoint(15.0, 0.0);
/* Set delegate back to the view, as is required per the
Apple documentation. */
self.viewToAnimate.layer.delegate = self.viewToAnimate;
} [CATransaction commit];
}
到目前为止,它看起来像一个魅力,但我一直期待一些奇怪的神器出现,因为暂时没有代表。
答案 1 :(得分:2)
您可能需要查看MTAnimation。它是一个UIView类别,提供类似计时功能的jQuery。
答案 2 :(得分:0)
媒体计时功能的选项数量有限。您可以使用列出的标准曲线,或为三次贝塞尔曲线提供几个控制点。但是,您生成的曲线不能生成小于0或大于1的值,因为它用于将线性时间映射到输出时间。
您列出的控制点值与时间值无关。除非我弄错了,否则它们会导致时间倒退,并且值会小于0.
如果你想要一个类似大小的任意动画,你可以将CAKeyFrameAnimation与一系列控制点一起使用。