Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 翻转NSViews图层的坐标(CALayer)_Cocoa_Core Animation - Fatal编程技术网

Cocoa 翻转NSViews图层的坐标(CALayer)

Cocoa 翻转NSViews图层的坐标(CALayer),cocoa,core-animation,Cocoa,Core Animation,我是在awakeFromNib做的: drawLayer = [CALayer layer]; self.layer = drawLayer; [self setWantsLayer:YES]; 有一个“添加:”操作 我希望子层从超层(视图的CALayer)的左上方添加 但它们是从左下角添加的 我试过仿射四射 CGAffineTransform trans = CGAffineTransformMake(1.0,0.0,0.0,-1.0,0.0,0.0); self.layer.

我是在awakeFromNib做的:

drawLayer = [CALayer layer];
self.layer = drawLayer;
[self setWantsLayer:YES];
有一个“添加:”操作

我希望子层从超层(视图的CALayer)的左上方添加 但它们是从左下角添加的

我试过仿射四射

   CGAffineTransform  trans = CGAffineTransformMake(1.0,0.0,0.0,-1.0,0.0,0.0);
   self.layer.affineTransform =    trans;
但滚动会使我的子层消失

我用了变换

CATransform3D aTransform = CATransform3DIdentity;
aTransform = CATransform3DMakeRotation(M_PI, 1, 0, 0);  
self.layer..transform = aTransform; 
我必须应用转换来反向旋转子层,在添加大约100个子层后,滚动变得缓慢,应用程序变得无响应

若我并没有应用任何变换(并没有仿射或并没有变换),那个么即使添加了1000个子层,应用程序也很快


我的应用程序必须承载大量不同大小的层。请帮助我如何使宿主层采用翻转的坐标…

如果要翻转层的坐标空间,我相信反转Y比例是更好的处理方法。我做了类似的事情,以便在iPhone上以另一种方式反转坐标系(以便UIView中托管的CALayer将遵循Mac的石英坐标系),使用以下代码:

self.layer.sublayerTransform = CATransform3DMakeScale(1.0f, -1.0f, 1.0f);
尝试使用此变换或应用于层的变换特性的相同变换。在我的测试中,这并没有损害任何性能


如果您发现需要应用变换来对抗每个层的翻转,这会降低性能,那么您可能应该手动计算每个层放置的正确Y坐标。这并不难(我相信self.layer.frame.size.height-y-newLayer.frame.size.height)。

不要忘记移动原点,这样你就不会简单地进入负空间。按层的高度平移y,然后按显示的比例缩放。对于UIView,我发现在将上面的子层Transform应用于UIView的托管层时,不需要在y中平移。正如我所读到的,层的默认锚定点是它的中心,这就是应用变换的目的。不过,你是对的。通常情况下,您确实需要Y翻译。哇,Brad,我看到它工作得很好,但我正在反向翻转每个子层,但到目前为止性能良好,我仍在考虑优化它。“一旦我找到它,我会更新线程,谢谢你。”RhythmicFistman-我必须做同样的事情。我不记得是否有另一种图层类型可以做到这一点,但我记得我必须基于平台取消翻转这些文本图层。
self.layer.sublayerTransform = CATransform3DMakeScale(1.0f, -1.0f, 1.0f);