我在awakeFromNib中这样做了:
drawLayer = [CALayer layer];
self.layer = drawLayer;
[self setWantsLayer:YES];
Run Code Online (Sandbox Code Playgroud)
有一个"添加:"动作
// 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];
}
Run Code Online (Sandbox Code Playgroud)
我希望子图层从superLayer(视图的CALayer)的左上角添加,但它们是从左下角添加的
我试过affineTranform
CGAffineTransform trans = CGAffineTransformMake(1.0,0.0,0.0,-1.0,0.0,0.0);
self.layer.affineTransform = trans;
Run Code Online (Sandbox Code Playgroud)
但滚动让我的子层消失了
我用过变换
CATransform3D aTransform = CATransform3DIdentity;
aTransform = CATransform3DMakeRotation(M_PI, 1, 0, 0);
self.layer..transform = aTransform;
Run Code Online (Sandbox Code Playgroud)
我必须将变换应用于反向旋转子层,并且在添加大约100个子层之后,滚动变慢并且应用程序变得无响应
如果我不应用任何变换(没有仿射或没有变换),那么即使在添加1000个子层之后应用也很快
我的应用程序必须托管大量不同大小的层.帮助我如何使托管层采取翻转坐标...
如果你想翻转图层的坐标空间,我相信反转Y尺度是更好的处理方法.我做了类似的事情,以便在iPhone上反转坐标系统(以便在UIView中托管的CALayer将遵循Mac的Quartz坐标系),使用以下代码:
self.layer.sublayerTransform = CATransform3DMakeScale(1.0f, -1.0f, 1.0f);
Run Code Online (Sandbox Code Playgroud)
尝试使用此变换或应用于图层变换属性的相同变换.在我的测试中,这并没有损害任何性能.
如果您发现需要应用变换来对抗每个图层的翻转,并且这会影响性能,那么您可能只需手动计算每个图层放置的正确Y坐标.这并不难(self.layer.frame.size.height - y - newLayer.frame.size.height,我相信).
| 归档时间: |
|
| 查看次数: |
3740 次 |
| 最近记录: |