Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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
Cocoa 核心动画动作转换:如何正确操作_Cocoa_Core Animation - Fatal编程技术网

Cocoa 核心动画动作转换:如何正确操作

Cocoa 核心动画动作转换:如何正确操作,cocoa,core-animation,Cocoa,Core Animation,我做了一个测试项目,在主窗口的内容视图中有一个视图。窗口有两个按钮:显示和消失。我希望在按下“显示”按钮时设置视图外观的动画,并在按下“消失”按钮时设置消失的动画。我想用图层动作来实现这一点。 换句话说,每次从superview添加或删除视图时,我都要制作动画。所以,在代码中,我只想编写[parent addSubview:view]或[view removeFromSuperview],动画应该在这一刻起作用。因此,分层操作似乎适合我的需要 以下是应用程序截图和(XCode 4.6): 以下

我做了一个测试项目,在主窗口的内容视图中有一个视图。窗口有两个按钮:显示和消失。我希望在按下“显示”按钮时设置视图外观的动画,并在按下“消失”按钮时设置消失的动画。我想用图层动作来实现这一点。 换句话说,每次从superview添加或删除视图时,我都要制作动画。所以,在代码中,我只想编写[parent addSubview:view]或[view removeFromSuperview],动画应该在这一刻起作用。因此,分层操作似乎适合我的需要

以下是应用程序截图和(XCode 4.6):

以下是我所做的:

我创建了一个视图,该视图将显示/消失并添加图层动作:

_coloredView = [[ColoredView alloc] initWithFrame:NSMakeRect(0, 0, 200, 200)];
_coloredView.bgColor = [NSColor yellowColor];
_coloredView.wantsLayer = YES;

// making appear transition from left

CATransition *appearTransition = [CATransition animation];
[appearTransition setDuration:2];
[appearTransition setType:kCATransitionPush];
[appearTransition setSubtype:kCATransitionFromLeft];
[_coloredView.layer addAnimation:appearTransition forKey:kCAOnOrderIn];
然后单击“显示”按钮时,我调用

[contentView addSubview:self.coloredView];
单击“消失”时,我调用:

[self.coloredView removeFromSuperview];
似乎有些事情是可行的。黄色矩形将第一次显示为它应该显示的样子。但是,下面列出了一些非常奇怪的事情:

  • 每次单击按钮时(视图消失后),我都应该调用
    addAnimation:forKey:
    ,因为在第一次出现之后,动画将不再工作

  • 消失根本不起作用(如果我在视图初始化之后或按下消失按钮之前尝试添加代码)

  • 当我试图通过animator添加子视图时,我的转换不起作用-只显示默认淡入动画

  • 似乎在从左到右的运动过程中,有某种褪色的效果。当您将持续时间设置为更大的值时,它是可见的

  • 尝试
    @“子视图”
    而不是
    kCAOnOrderIn