这是对上一个问题的跟进.我的下面的代码通过缩放和旋转它来动画一个正方形.它通过进行旋转变换并向其添加缩放变换来实现.这很好.完成后,它会调用throbReset.我以前有throbReset只是将自己的变换设置为CGAffineTransformMakeScale,并且会对它进行缩放,但也会取消旋转.所以我尝试从当前变换开始并向其添加unscale,但现在它没有做任何事情(可见).
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];
}
最佳答案 你只是缩放到相同的大小,因为你基本上是说当前变换并在X上以1:1和Y上的1:1缩放它.你可能想在你的第二种方法中做0.5,0.5而不是1.0,1.0.
CGAffineTransform xForm = [self transform];
xForm = CGAffineTransformScale(xForm,0.5, 0.5);
添加旋转时请记住以相反的顺序执行此操作,因此旋转然后缩放.如果您参与翻译,这将更为重要,但在这种情况下可能会以任何方式工作.