Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何自定义UIViewAnimationCurve,如CAMediaTimingFunction';带控制点的s函数_Objective C_Ios_Animation_Core Animation_Uiviewanimation - Fatal编程技术网

Objective c 如何自定义UIViewAnimationCurve,如CAMediaTimingFunction';带控制点的s函数

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,但

UIViewAnimationCurve仅具有

  • UIViewAnimationCurveEaseInOut
  • UIViewAnimationCurveEaseIn
  • UIViewAnimationCurveEaseOut
  • UIViewAnimationCurveLinear
这些功能

但是,我需要类似于UIView的expoutBackInOut动画

与Expoot类似的是
[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的计时函数