0

我正在使用以下代码转储我正在制作动画的视图的图层和表示层的边界状态之前和之后的状态。我没有看到任何变化 - 看起来我在理解方面遗漏了一些东西 - 已经阅读了几次 CA 编程指南但无济于事。任何指导将不胜感激

- (void) shrink{ [Dumper dumpRect:@"BEFORE layer bounds" :[iv.layer bounds]]; [Dumper dumpRect:@"BEFORE p-layer bounds" :[iv.layer.presentationLayer bounds]];

[UIView animateWithDuration:1.5 animations:^{
      CABasicAnimation *scaleAnim = [CABasicAnimatianimationWithKeyPath:@"transform.scale"];

        scaleAnim.fromValue = [NSNumber numberWithFloat:1];
        scaleAnim.toValue = [NSNumber numberWithFloat:0.5];

    scaleAnim.autoreverses=NO;
    [scaleAnim setDuration:1];
    // these need to be invoked to retain the scaled version
    scaleAnim.removedOnCompletion = NO;
    [scaleAnim setFillMode:kCAFillModeForwards];

    [iv.layer addAnimation:scaleAnim forKey:@"scale"];

}completion:^(BOOL finished){

    NSLog(@"Animation done - %d",finished);
    [Dumper dumpRect:@"AFTER layer bounds" :[iv.layer bounds]];
    [Dumper dumpRect:@"AFTER p-layer bounds" :[iv.layer.presentationLayer bounds]];

}];

}

在运行此代码时 - 我得到以下信息: 层边界之前 - 矩形 x=0.000000 y=0.000000 w=100.000000 h=200.000000 在 p 层边界之前 - 矩形 x=0.000000 y=0.000000 w=100.000000 h=200.000000 动画完成 - 1在层边界之后 - 矩形 x=0.000000 y=0.000000 w=100.000000 h=200.000000 在 p 层边界之后 - 矩形 x=0.000000 y=0.000000 w=100.000000 h=200.000000

那么之前和之后之间没有变化吗?

即使使用“transform.translation”转换,我也观察到相同的行为。

我需要最终的界限,以便我可以设置 UIView 即 iv 以设置适当的帧值。

相关问题是 - 我知道当图层被动画时,它只是完成的绘图,但底层视图仍然使用原始框架设置 - 设置 UIView 框架的正确方法是什么。

4

1 回答 1

0

您不应该将该代码放在UIView'animateWithDuration方法中。CABasicAnimation如果您只想为某些东西设置动画,则可以使用,或者如果animateWithDuration您想实际更改某些内容并希望它具有动画效果,则可以使用。例如,如果你想改变帧动画,你写:

[UIView animateWithDuration:1.5 animations:^{
    CGRect newFrame = CGRectMake(0, 0, 50, 100);
    iv.frame = newFrame;
}completion:^(BOOL finished){
    // Code to be executed after the animation
}];

这将改变你的框架,它会被动画化。希望这可以帮助!

于 2013-01-05T20:31:31.787 回答