Objective c 如何自定义UIViewAnimationCurve,如CAMediaTimingFunction';带控制点的s函数
UIViewAnimationCurve仅具有Objective c 如何自定义UIViewAnimationCurve,如CAMediaTimingFunction';带控制点的s函数,objective-c,ios,animation,core-animation,uiviewanimation,Objective C,Ios,Animation,Core Animation,Uiviewanimation,UIViewAnimationCurve仅具有 UIViewAnimationCurveEaseInOut UIViewAnimationCurveEaseIn UIViewAnimationCurveEaseOut UIViewAnimationCurveLinear 这些功能 但是,我需要类似于UIView的expout,BackInOut动画 与Expoot类似的是[camediatiming函数和控制点:0.12:0.51:-0.4:1] 我曾经使用过cabasicanition,但
- UIViewAnimationCurveEaseInOut
- UIViewAnimationCurveEaseIn
- UIViewAnimationCurveEaseOut
- UIViewAnimationCurveLinear
[camediatiming函数和控制点:0.12:0.51:-0.4:1]代码>
我曾经使用过cabasicanition,但是它不能像UIView动画那样改变帧,改变视图大小时效果很差
或者,您是否有更好的方法来更改视图框架,使其看起来像真实的,而不是像缩放
谢谢。具有媒体定时功能的选项数量有限。可以使用列出的标准点,也可以为三次贝塞尔曲线提供两个控制点。但是,生成的曲线不能生成小于0或大于1的值,因为它用于将线性时间映射到输出时间
列出的控制点值作为时间值没有意义。除非我弄错了,否则它们会导致计时倒退,并使值小于0
如果您想要任意大小的动画,可以将CAKeyFrameAnimation与一系列控制点一起使用。这里的问题是无法为基于UIView的动画指定计时函数。据我所知,你还有很多不愉快的选择:
- 切换到使用基于CALayer的动画,严重的问题是,如果代理设置为视图,则动画不会发生。因为这是UIView所必需的,所以这是一个没有吸引力的选项
- 将父层添加到视图中,并为该层设置动画,同样严重的问题是该层将不在nib中,对nib的修改可能会无意中破坏动画
- 不要使用自定义计时功能
在设置动画之前,我将代理设置为零,之后又将代理设置为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];
}
到目前为止,它似乎很有魅力,但我一直在期待一些奇怪的工件出现,因为暂时没有委托。您可能想看看。它是一个UIView类别,提供类似jQuery的计时函数