0

縮小するオブジェクトをアニメートしています。ユーザーはいつでもボタンを押して、オブジェクトの現在の倍率を取得できます。(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;
}

どんなアドバイスも大歓迎です:)

ありがとう、マイケル。

4

1 に答える 1

1

ビューをすべての軸で均一にスケーリングする場合、スケール値はm11(およびm22も)に等しくなります。

コードをコピーして貼り付けてサンプルを実行しました。次の2行は冗長なようです。

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

ビューはすぐに半分に縮小し(スケール値には0.5を使用しました)、アニメーションでさらに2倍縮小します

于 2010-08-16T14:10:55.877 に答える