我试过这个:
CATransform3D rotationTransform = [[self.layer presentationLayer] transform];
这不起作用,因为编译器会抛出警告并发出错误:
警告:多种方法“-transform” 找到。错误:初始化程序无效。
然后我尝试了这个:
CATransform3D rotationTransform = [[self.layer presentationLayer] valueForKey:@"transform"];
错误:初始化程序无效。
这有什么问题?
答案 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,这是不可能隐式执行的。您不能只将对象指针强制转换为结构。