gpt4 book ai didi

cocoa - 翻转 NSViews 层(CALayer)的坐标

转载 作者:行者123 更新时间:2023-12-03 16:26:38 24 4
gpt4 key购买 nike

我在 awakeFromNib 中做到了这一点:

drawLayer = [CALayer layer];
self.layer = drawLayer;
[self setWantsLayer:YES];

有一个“添加:”操作

// some  business logic

[drawLayer addSublayer:layer];
[self layout];

-(void)layout
while(pg = [pageEnumr nextObject])

{
//rect is calculated so that layers are added in order (left to right)
[pg setFrame:rect];
}

我希望从 superLayer( View 的 CALayer)的左上角添加子层但它们是从左下角添加的

我尝试了 affineTranform

   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 的 Quartz 坐标系):

self.layer.sublayerTransform = CATransform3DMakeScale(1.0f, -1.0f, 1.0f);

尝试使用此变换或应用于图层变换属性的相同变换。在我的测试中,这并没有损害任何性能。

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

关于cocoa - 翻转 NSViews 层(CALayer)的坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/611396/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com