我是在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 of view) 但它们是从左下角添加的
我试过了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个子层之后应用也很快
我的应用程序必须托管大量不同大小的图层。帮助我如何使托管层采取翻转坐标...
答案 0 :(得分:6)
如果你想翻转图层的坐标空间,我相信反转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,我相信)。