我在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个子层之后应用也很快
我的应用程序必须托管大量不同大小的层.帮助我如何使托管层采取翻转坐标...
如果你想翻转图层的坐标空间,我相信反转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,我相信).