请问iPhone OS支持隐动画?(Does iPhone OS support implicit

2019-06-26 16:56发布

从Mac OS X例如:

[[aView animator] setFrame:NSMakeRect(100.0,100.0,300.0,300.0)]; 

我曾尝试在UIKit中类似的东西,但它似乎动画师的方法是不是有UIView的。 因此,有没有“隐”动画?

Answer 1:

iPhone的支持隐式的动画,但它不使用动画对象,它直接内置到UIView的。 试试这个:

[UIView beginAnimations:nil context:nil];
[aView setFrame:NSMakeRect(100.0,100.0,300.0,300.0)];
[UIView commitAnimations];

确切的细节都记录在这里 。

每个视图总是层背衬的一样,所以你不要;吨有为了得到明确的动画层打开图层。



Answer 2:

原来iPhone OS确实支持CALayer的隐式动画从苹果的核心动画编程指南中的规定。 Mac OS X上,当它通过设置一个备份一个的NSView层成为动画:

[view setWantsLayer:YES];

在iPhone OS,只需设置图层委托托管的UIView派生的对象,你想动画的UIViewController派生类。 举例来说,如果你有一个UILabel称为标签定义的属性,承载它的UIViewController派生类中,代码会看起来像这样(为一个UIButton润色内部事件的事件处理的例子):

-(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仅通过改变位置。

关于这个的一些注意事项:

  1. 它肯定是代表,而不是UIView的的UIViewController中。 制作一个UIView委托导致应用炸毁。

  2. 委托需要在调用的方法被设置的UIViewController派生的类已经完全结束加载,即,在对由类托管的控制的事件处理程序之后。 我试着在initWithNibName将其添加:束:, awakeFromNib,viewDidLoad中和viewWillAppear中:动画,并没有奏效。 设置在委托前两种方法造成标签不动画; 它只是立即换了个位置。 添加它在过去两年造成标签完全消失。

  3. 委托是在事件处理程序中设置一次后,这将是很好的了的UIViewController派生类的寿命的剩余部分。 改变在其他事件处理的图层属性将导致他们无需再次设置图层的委托动画。

  4. 当的UIViewController派生类失去焦点时,该委托必须设置为nil在viewWillDisappear:动画的方法,否则,应用程序将炸毁

必须有一些地方设置只所以没有设置多次作为事件处理程序被调用的结果代表一个时间,但我还没有找到那个地方。 至少是这样工作的,并多次将其设置为事件处理的结果是多次调用似乎很无害的。

这肯定会是很好,如果这是核心动画编程指南中的所有记录。 我花了几天试图找出了这一点! 希望这样可以节省狩猎下来的一切烦恼!



文章来源: Does iPhone OS support implicit animation?