我正在尝试使用CALayer 3D变换创建3D用户界面。我已经找到了实现这一目标的基本技术,但实时性能相当糟糕。具体来说,用户应该能够交互式地“平移”界面“场景”。
在下面的代码片段中,“model”是我要动画化的图层。“camera”是我不断更新的CATransform3D矩阵,通过应用触摸平移来更新。
这种方法起作用,但平移非常缓慢。如果我取消注释带有CGAffineTransform的部分,我会得到快速响应的平移 - 但在平移时会失去应该发生的透视变化。
如何提高渲染性能?
在下面的代码片段中,“model”是我要动画化的图层。“camera”是我不断更新的CATransform3D矩阵,通过应用触摸平移来更新。
这种方法起作用,但平移非常缓慢。如果我取消注释带有CGAffineTransform的部分,我会得到快速响应的平移 - 但在平移时会失去应该发生的透视变化。
- (void)didPan:(UIPanGestureRecognizer*)pan
{
if (pan.state==UIGestureRecognizerStateChanged)
{
CGPoint p = [pan translationInView:self.view.window];
camera = CATransform3DTranslate(camera, p.y, 0, -p.x);
model.transform = CATransform3DConcat(camera, modelView);
// CGAffineTransform tA = self.view.transform;
// tA = CGAffineTransformTranslate(tA, p.x, p.y);
// self.view.transform = tA;
[pan setTranslation:CGPointZero inView:self.view.window];
}
}
如何提高渲染性能?