从CABasicAnimation获取比例因子

时间:2010-08-16 14:00:26

标签: iphone objective-c animation cgaffinetransform cabasicanimation

我正在制作一个缩小的物体。在任何时候,用户都可以点击按钮来获得对象的当前比例因子。 (我首先使用CGAffineTransformMakeScale缩放对象,因此当它达到原始大小时,缩放因子应为1)。我只是不确定如何从动画UIImageView中检索当前比例因子...这是我的代码:

- (void)startShrink {
    CGAffineTransform scaleFactor = CGAffineTransformMakeScale(kScaleX, kScaleY);
    imageOutline.transform = scaleFactor;

    CABasicAnimation *shrink = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
    shrink.toValue = [NSNumber numberWithDouble:0.5];
    shrink.duration = 2.0;
    shrink.fillMode=kCAFillModeForwards;
    shrink.removedOnCompletion=NO;
    shrink.delegate = self;

    [imageOutline.layer addAnimation:shrink forKey:@"shrink"];
}

我尝试了以下内容,但我不确定m12是我应该从转换中检索的值。或者,如果事实上这是正确的方法:

- (float)calculateScale {
    CATransform3D scaleTransform = [(CALayer *)[imageOutline.layer presentationLayer] transform];
    float scale = scaleTransform.m12;
    NSLog(@"Scale: %g", scale);
    return scale;
}

任何建议最受赞赏:)

谢谢,迈克尔。

1 个答案:

答案 0 :(得分:1)

如果你只是在所有轴上均匀地缩放视图,那么缩放值应该等于m11(以及m22)。

我刚刚运行了一个带有代码复制粘贴的示例 - 似乎以下两行是多余的:

CGAffineTransform scaleFactor = CGAffineTransformMakeScale(kScaleX, kScaleY);
imageOutline.transform = scaleFactor;

立即缩小一半(我使用0.5作为缩放值),然后使用动画缩小两倍