【发布时间】:2012-05-08 11:06:45
【问题描述】:
我正在使用以下函数将脉冲效果应用于视图
- (void)pulse {
CATransform3D trasform = CATransform3DScale(self.layer.transform, 1.15, 1.15, 1);
trasform = CATransform3DRotate(trasform, angle, 0, 0, 0);
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform"];
animation.toValue = [NSValue valueWithCATransform3D:trasform];
animation.autoreverses = YES;
animation.duration = 0.3;
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
animation.repeatCount = 2;
[self.layer addAnimation:animation forKey:@"pulseAnimation"];
}
我想使用 CGAffineTransform self.transform 而不是 CATransform3D self.layer.transform 获得相同的结果。这可能吗?
【问题讨论】:
-
出于好奇,如果您已经从前者获得了您想要的结果,为什么还要关心您是将 CATransform3D 应用于图层还是将 CGAffineTransform 应用于视图?
-
因为self.layer.transform的初始值和self.transform不同,不是吗?
-
我的意思是,在使用脉冲方法之前,我对视图应用了一些仿射变换,但我没有接触图层,所以我猜变换是那里的身份
-
据我所知,应用于视图的变换被转换为底层的适当 CATransform3D。这很容易通过对您的视图应用转换来验证,然后运行上面的动画(当然,删除了您的非功能性
CATransform3DRotate())。应该是基于之前UIView的transform。 -
谢谢,我的代码有点不清楚,我得到了错误的动画。因此我猜想这两个变换(层和视图)是不同的,但我显然错了。谢谢!
标签: core-animation core-graphics