核心动画动作转换:怎么做对

时间:2013-03-14 12:44:12

标签: cocoa core-animation

我在主窗口的内容视图中创建了一个带有一个视图的测试项目。窗口有两个按钮:出现&消失。当按下按钮时我想要动画视图外观,按下消失按钮时动画消失。我想用图层动作来做这件事。 换句话说,我想在每次从superview添加或删除视图时制作动画。所以,在代码中我只想写[parent addSubview:view]或[view removeFromSuperview],动画应该在那个时刻起作用。因此,Layer Actions似乎符合我的需求。

这是应用截图和source code(XCode 4.6):

enter image description here

以下是我采取的措施:

我创建了一个将出现/消失并添加图层操作的视图:

_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];

似乎有些事情有效。黄色矩形首次出现。但是,这里列出了很奇怪的事情:

  1. 我每次点击按钮时都会调用addAnimation:forKey:(视图消失后),因为首次出现动画后将不再有效。

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

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

  4. 似乎在从左到右移动过程中会出现某种褪色现象。当您将持续时间设置为更大的值时,它是可见的。

1 个答案:

答案 0 :(得分:0)

尝试使用@"subviews"代替kCAOnOrderIn