UIViewAnimationCurve 仅具有
这些功能。
但是,我需要UIView的 ExpoOut , BackInOut 动画。
像ExpoOut是
[CAMediaTimingFunction functionWithControlPoints:0.12 :0.51 :-0.4 :1];
我已经使用了 CABasicAnimation ,但是它不能像UIView动画一样更改框架,更改 View 大小时非常糟糕。
或者,您有什么更好的方法可以像真实的那样改变视框,而不是像放大一样。
谢谢。
最佳答案
这里的问题是无法为基于UIView的动画指定计时功能。据我所知,您接下来会遇到许多不愉快的选择:
我通过在动画前将委托(delegate)设置为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];
}
到目前为止,它看起来像是一种魅力,但是由于临时为零的委托(delegate),我一直期待出现一些奇怪的工件。
关于objective-c - 如何像CAMediaTimingFunction的functionWithControlPoints一样自定义UIViewAnimationCurve,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9905189/