Нельзя отменить преобразование масштаба без отмены преобразования вращения - PullRequest
4 голосов
/ 21 октября 2010

Вот продолжение предыдущего вопроса.Мой код ниже анимирует квадрат путем его масштабирования и поворота.Это делается путем преобразования вращения и добавления преобразования масштаба к нему.Это отлично работает.Когда это сделано, он вызывает throbReset.Раньше я throbReset просто устанавливал self's transform на CGAffineTransformMakeScale, и это приводило бы к его масштабированию, а также к разворачиваниюПоэтому я попытался начать с текущего transform и добавить к нему немасштабирование, но теперь он ничего не делает (видимый).


CGColorRef color = [[colorArray objectAtIndex:colorIndex] CGColor];
 [UIView beginAnimations:nil context:NULL];
 [UIView setAnimationDelegate:self];
 [UIView setAnimationDuration:0.5f];
 [UIView setAnimationDidStopSelector:@selector(throbReset:context:)];
//  [[self layer] setFillMode:kCAFillModeForwards]; // apparently not needed
 CGAffineTransform xForm = CGAffineTransformMakeScale(2.0, 2.0);
 xForm = CGAffineTransformRotate(xForm, M_PI / 4);
 [self setTransform:xForm];
 [[self layer] setBackgroundColor:color];
 [UIView commitAnimations];
}

- (void)throbReset:(NSString *)animationID context:(void*)context {
 NSLog(@"-%@:%s fired", [self class], _cmd);
 [UIView beginAnimations:nil context:NULL];
 [UIView setAnimationDuration:2.0];
 CGAffineTransform xForm = [self transform];
 xForm = CGAffineTransformScale(xForm, 1.0, 1.0);
 [self setTransform:xForm];
 [UIView commitAnimations];
}

1 Ответ

2 голосов
/ 21 октября 2010

Вы просто масштабируете до того же размера, так как вы в основном говорите, возьмите текущее преобразование и масштабируйте его 1: 1 по X и 1: 1 по Y. Возможно, вы захотите сделать 0,5,0,5 вместо 1,0,1,0 в вашемВторой метод.

CGAffineTransform xForm = [self transform];
xForm = CGAffineTransformScale(xForm,0.5, 0.5);

Имейте в виду, когда вы добавляете вращение, чтобы сделать это в обратном порядке, поэтому вращайте, а затем масштабируйте.Это было бы более важно, если бы вы включили перевод, но в этом случае, вероятно, работали бы в любом случае.

...