CAShapeLayer用户交互缓慢

我有一个CAShapeLayer,它必须做一个简单的任务,在用户的手指指导下移动屏幕。 问题是运动太慢了。该层确实移动,但有一个滞后,感觉很慢。 我有另一个测试应用程序,其中移动UIImage并且没有任何延迟,图像立即移动。 我该怎么做才能克服这个问题? - (void)touchesBegan:(NSSet *)触及withEvent:(UIEvent *)事件 {     currentPoint = [[touches anyObject] locationInView:self]; } - (void)touchesMoved:(NSSet *)触及withEvent:(UIEvent *)事件 {     CGPoint activePoint = [[touches anyObject] locationInView:self];     CGPoint newPoint = CGPointMake(activePoint.x - currentPoint.x,activePoint.y - currentPoint.y);     curLayer.position = CGPointMake(shapeLayer.position.x + newPoint.x,shapeLayer.position.y + newPoint.y);     currentPoint = activePoint; } 谢谢!     
已邀请:
请记住,当您在图层上设置位置时(假设它不是默认情况下禁用操作的UIView的根层),它会隐式动画到新位置,这需要0.25秒。如果你想让它变得更加快捷,暂时禁用图层上的动作,如下所示:
- (void) touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event
{
  CGPoint activePoint = [[touches anyObject] locationInView:self];
  CGPoint newPoint = CGPointMake(activePoint.x - 
                              currentPoint.x,activePoint.y - currentPoint.y);

  [CATransaction begin];
  [CATransaction setDisableActions:YES];
  curLayer.position = CGPointMake(shapeLayer.position.x + 
                             newPoint.x, shapeLayer.position.y + newPoint.y);
  [CATransaction commit];
  currentPoint = activePoint;
}
这应该使它跳转到新位置而不是动画。如果这没有帮助,那么让我看一下你的图层初始化代码,这样我就可以看到它有哪些属性和尺寸。例如,cornerRadius等属性可能会影响性能。     
尝试在
CAShapeLayer
上将
shouldRasterize
设置为
YES
,特别是如果它通常以相同的比例绘制。如果您的应用在高DPI设备上运行,您可能还需要设置
rasterizationScale
以匹配图层的
contentsScale
。 虽然栅格化您的形状可以更快地移动形状,但您可能希望在为图层的路径或大小设置动画时暂时禁用光栅化。     

要回复问题请先登录注册