如果不撤消旋转变换,则无法撤消缩放变换

时间:2010-10-21 15:33:49

标签: iphone animation uiview ios transform

以下是对上一个问题的跟进。我的下面的代码通过缩放和旋转它来动画一个正方形。它通过进行旋转变换并向其添加缩放变换来实现。这很好。完成后,它会调用throbReset。我曾经throbReset只将self's transform设置为CGAffineTransformMakeScale,这会将其缩放,但也会取消旋转。所以我尝试从当前transform开始并向其添加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];
}

1 个答案:

答案 0 :(得分:2)

你只是缩放到相同的大小,因为你基本上是说当前变换并在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);

当您添加旋转以相反的顺序执行此操作时请记住,因此旋转然后缩放。如果您参与翻译,这将更为重要,但在这种情况下可能会以任何方式工作。