例子:iPhone OS是否支持隐式动画?从Mac OS X
[[aView animator] setFrame:NSMakeRect(100.0,100.0,300.0,300.0)];
我已经试过UIKit中类似的东西,但它似乎动画师的方法是不是有UIView的。所以没有“隐式”动画?
例子:iPhone OS是否支持隐式动画?从Mac OS X
[[aView animator] setFrame:NSMakeRect(100.0,100.0,300.0,300.0)];
我已经试过UIKit中类似的东西,但它似乎动画师的方法是不是有UIView的。所以没有“隐式”动画?
iPhone支持隐式动画,虽然它不使用animator对象,但它直接构建到UIView中。试试这个:
[UIView beginAnimations:nil context:nil];
[aView setFrame:NSMakeRect(100.0,100.0,300.0,300.0)];
[UIView commitAnimations];
确切的细节记录在here。
每个视图都始终支持层,所以您不必打开图层以获取显式动画的图层。
原来iPhone OS确实支持在Apple的Core Animation Programming Guide中定义的CALayer上的隐式动画。
[view setWantsLayer:YES];
在iPhone OS,只需将层代表到的UIViewController派生类承载的UIView派生的对象,你想:在Mac OS X,当它通过设置备份的一个NSView一个层变成动画动画。例如,如果您有一个为称为标签的UILabel定义的属性,则在托管它的UIViewController派生类中,代码将如下所示(UIButton Touch Up Inside事件的事件处理程序示例):
-(void) buttonPressedToAnimateTheLabel:(id)sender
{
CALayer *labelLayer = self.label.layer;
labelLayer.delegate = self;
layer.position = CGPointMake(labelLayer.position.x, labelLayer.position.y + 50);
}
然后只需通过更改位置,标签就会以与在Mac OS X上完全相同的方式进行动画制作。
关于这个的一些注意事项:
绝对是 的UIViewController那是 代表,而不是UIView的。制作 UIView委托导致应用程序 炸毁。
委托需要在一个称为 方法要设置的 的UIViewController派生的类具有 完全完成装载,即在后为 由类托管的控制 事件处理程序。我尝试在initWithNibName:bundle: 中添加 它awakeFromNib,viewDidLoad和 viewWillAppear:动画,它没有工作 。在 中设置代理,前两种方法导致 标签不生成动画;它只是 立即改变位置。 在最后两个中添加它会导致 标签完全消失。委托是在 事件处理程序设置一次
后,这将有利于 的的 的UIViewController派生类的寿命的剩余部分。 更改 其他事件处理程序中的图层属性将使其 生成动画,而无需再次为该图层设置 委托。
时的UIViewController派生类失去焦点,委托必须设置为零的viewWillDisappear:动画的方法,否则应用程序将炸毁
必须有一些地方设置只委托一次,所以它不会被设置多次作为一个事件处理程序被调用的结果,但我还没有找到那个地方。至少它以这种方式工作并多次设置,因为多次调用事件处理程序似乎是无害的。
如果将它全部记录在Core Animation Programming Guide中,那肯定会很好。我花了好几天的时间来解决这个问题!希望这可以节省寻找它的所有麻烦!
我在添加委托之前遇到了与图层不相同的问题(只是跳跃)。不过,我(至少在iPad上为3.2)能够在viewDidLoad()方法中设置委托,并且它可以正常工作。 – 2010-07-08 15:22:17
我无法得到这个工作,但它显示了承诺。我非常想知道更多关于此的信息,因为无时无刻不得不设置动画块。 – 2011-04-15 07:42:39
这不是一个明确的动画?或者有什么不同? – Thanks 2009-07-24 16:31:02
否。显式动画是当您直接使用CoreAnimation并将CAAnimations附加到图层时。隐式动画是当你设置一些关于动画的参数时,但除此之外,只需在视图上设置普通属性并让系统为你制作动画。在桌面上,隐式动画是通过代理转发所有NSView完成的,UIView知道如何在不使用代理的情况下处理它,你只需告诉它你希望它通过类方法构造隐式动画。 – 2009-07-24 17:28:50
路易斯,你是我的英雄! – 2011-01-20 17:46:50