如何正确获取presentationLayer的当前变换?

时间:2009-05-18 17:32:51

标签: iphone core-animation

我试过这个:

CATransform3D rotationTransform = [[self.layer presentationLayer] transform];

这不起作用,因为编译器会抛出警告并发出错误:

  

警告:多种方法“-transform”   找到。错误:初始化程序无效。

然后我尝试了这个:

CATransform3D rotationTransform = [[self.layer presentationLayer] valueForKey:@"transform"];
  

错误:初始化程序无效。

这有什么问题?

1 个答案:

答案 0 :(得分:6)

-presentationLayer会返回id。您需要将其强制转换为CALayer:

CATransform3D rotationTransform = [(CALayer*)[self.layer presentationLayer] transform];

为了非常安全,你先检查一下:

CATransform3D rotationTransform = {0};
CALayer* presentationLayer = (CALayer*)[self.layer presentationLayer];
if( [presentationLayer respondsToSelector:@selector(transform)]) {
    rotationTransform = presentationLayer.transform;
}

但在实践中,没有这个检查就没问题。

在第二种情况下,-valueForKey:也返回id,您尝试将其分配给struct,这是不可能隐式执行的。您不能只将对象指针强制转换为结构。