Cocoa touch UIView动画是否取决于所设置属性的顺序?

Cocoa touch UIView动画是否取决于所设置属性的顺序?,cocoa-touch,uiview,uiviewanimation,Cocoa Touch,Uiview,Uiviewanimation,我在UIView动画中遇到了一些奇怪的事情。动画缩放子视图 从矩形填充其父视图: //update views CGRect startRect = ...; //A rect in parentView co-ordinates space that childView appears from UIView *parentView = ...; UIView *childView = ...; [parentView addSubview:childView]; //animation s

我在
UIView
动画中遇到了一些奇怪的事情。动画缩放子视图 从矩形填充其父视图:

//update views
CGRect startRect = ...; //A rect in parentView co-ordinates space that childView appears from
UIView *parentView = ...;
UIView *childView = ...;
[parentView addSubview:childView];

//animation start state
childView.alpha = 0;
childView.center = (CGPointMake( CGRectGetMidX(startRect),  CGRectGetMidY(startRect)));
//TODO: set childViews transform and so that it is completely contained with in startRect
childView.transform = CGAffineTransformMakeScale(.25, .25); 

[UIView animateWithDuration:.25 animations:^{
    childView.transform = CGAffineTransformIdentity;        
    childView.alpha = 1;
    childView.frame = parentView.bounds;
}];
上述代码按预期工作。但是,如果将动画块重新排序为以下顺序,则动画会失控(大规模缩放且中心点在屏幕外):


这是怎么回事?为什么属性设置的顺序对动画很重要?

属性的顺序可能是相关的,因为当变换不是标识变换时,帧是未定义的

警告:如果
转换
属性不是标识转换,则此属性的值未定义,因此应忽略

这对于获取帧值是正确的,但是我相信对于设置帧也是正确的

我几乎可以肯定,动画块中的更改发生在视图层的模型上,然后在视图层的表示上设置动画

由于您来自变换为比例的状态,因此未定义帧的设置


在上面的示例中,在设置帧之前将变换设置为标识,因此它会按预期工作,但在第二个示例中,在恢复变换之前设置帧。

属性的顺序可能是相关的,因为当变换不是标识变换时,帧是未定义的

警告:如果
转换
属性不是标识转换,则此属性的值未定义,因此应忽略

这对于获取帧值是正确的,但是我相信对于设置帧也是正确的

我几乎可以肯定,动画块中的更改发生在视图层的模型上,然后在视图层的表示上设置动画

由于您来自变换为比例的状态,因此未定义帧的设置

在上面的示例中,在设置帧之前将变换设置为标识,因此它会按预期工作,但在第二个示例中,在恢复变换之前设置帧

[UIView animateWithDuration:.25 animations:^{
    childView.frame = parentView.bounds; //This line was after .alpha
    childView.transform = CGAffineTransformIdentity;        
    childView.alpha = 1;
}];