Voici une suite à une question précédente. Mon code ci-dessous anime un carré en l'agrandissant et en le faisant pivoter. Il le fait en faisant une rotation et en lui ajoutant une transformation d'échelle. Cela fonctionne bien. Quand c'est fait, il appelle throbReset
. J'avais l'habitude d'avoir throbReset
juste mis self's transform
à un CGAffineTransformMakeScale
et cela le déplierait, mais le relèverait aussi. J'ai donc essayé de commencer par le transform
actuel et d'y ajouter l'unscale, mais maintenant il ne fait plus rien (visible).Impossible d'annuler une transformation d'échelle sans annuler une transformation de rotation
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];
}
Donc, si je venais de définir ma propriété 'transform' sur' CGAffineTransformMakeScale (1.0, 1.0) 'ne serait-il pas revenu à la taille d'origine? Je ne comprends pas vraiment la différence entre 'CGAffineTransformMakeScale' et' CGAffineTransformScale'. Je veux dire que je comprends ce que sont les arguments, mais pas la fonctionnalité sous-jacente. – Steve
Vous opérez relativement sur la transformation que vous spécifiez dans l'appel de fonction CGAffine, donc TransformScale met à l'échelle l'entrée par rapport à elle-même. Dans ce cas, vous entrez la transformation en cours, qui est mise à l'échelle 1: 1. Je ne suis pas sûr sur la différence MakeScale, peut-être qu'il suppose la transformation d'identité comme la transformation d'entrée. – Ben