Получение масштабного коэффициента из CABasicAnimation - PullRequest
0 голосов
/ 16 августа 2010

Я оживляю уменьшающийся объект.В любой момент пользователь может нажать кнопку, чтобы получить текущий масштабный коэффициент объекта.(Я начинаю с масштабирования объекта с использованием 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 Ответ

1 голос
/ 16 августа 2010

Если вы просто масштабируете свой вид равномерно по всем осям, тогда значение масштаба должно быть равно m11 (и m22 также).

Я только что выполнил пример с вставленным копированием кода - кажется, что следующие 2 строки являются избыточными:

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

Вид сразу уменьшается в два раза (я использовал 0,5 для значений шкалы), а затем сжимается в два раза больше с анимацией

...