当前位置:  开发笔记 > 编程语言 > 正文

翻转NSViews图层的坐标(CALayer)

如何解决《翻转NSViews图层的坐标(CALayer)》经验,为你挑选了1个好方法。

我在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(视图的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个子层之后应用也很快

我的应用程序必须托管大量不同大小的层.帮助我如何使托管层采取翻转坐标...



1> Brad Larson..:

如果你想翻转图层的坐标空间,我相信反转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,我相信).

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有