1

根据这个答案,有一种方法可以使 CGAffineTransform 永久化:

iphone - 使 CGAffineTransform 永久化

但它没有解释......答案讲述了动画生成的副本,但不清楚如何获取它并分配给原始对象,所以这是代码,如何使其永久化?

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.3];

[UIView setAnimationRepeatAutoreverses:NO];
[UIView setAnimationRepeatCount:1];

[UIView setAnimationDelegate:self];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];

float angleRadians = 180 * ((float)M_PI / 180.0f);
CGAffineTransform t = CGAffineTransformMakeRotation(angleRadians);

self.myView.transform = t;
[self.myView setCenter:CGPointMake(160, 220)];

[UIView commitAnimations];

谢谢

4

2 回答 2

1

您可以尝试将级别降低到核心动画并应用具有以下属性的变换动画:

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform"];
animation.fromValue = [NSValue valueWithCATransform3D: t];
animation.toValue = [NSValue valueWithCATransform3D: t];
animation.duration = 0.0;
animation.removedOnCompletion = NO;
animation.fillMode = kCAFillModeBoth;
[yourView.layer addAnimation:animation forKey:@"transform"];

然后你可以做其他核心动画,它应该保留变换。不要忘记导入 QuartzCore 框架。

于 2011-08-31T21:26:28.463 回答
0

在 iOS 4.0 或更高版本中,Apple 建议使用基于块的动画

参考:iPhone OS 4.0 中基于块的动画方法是什么?

    [UIView animateWithDuration:0.3 
                      delay:0 
                    options:UIViewAnimationOptionCurveEaseOut 
                 animations:^{ self.myView.transform = CGAffineTransformMakeRotation(M_PI) } 
                 completion:NULL];

不确定这是否能完全解决您的问题,但这是朝着正确方向迈出的一步。

于 2011-09-01T15:38:02.557 回答