iOS中的拖放动画优化?
我添加了很多动画,所有这些都是通过变换属性核心动画CATTransformM3D执行的。问题是我需要从零开始重新计算场景中每个对象的所有变换,因为拖放可能会对所有对象产生影响,并且这种影响也应该设置动画 如何提高拖放性能?例如: 正方形在长按手势时移动。它的比例取决于它的中心x值。是否可以一次性计算并应用转换/缓存进行拖动?或者我应该使用其他东西,而不是核心动画 编辑 我使用以下项目作为拖放的原型: 根据其代码:iOS中的拖放动画优化?,ios,animation,drag-and-drop,core-animation,catransform3d,Ios,Animation,Drag And Drop,Core Animation,Catransform3d,我添加了很多动画,所有这些都是通过变换属性核心动画CATTransformM3D执行的。问题是我需要从零开始重新计算场景中每个对象的所有变换,因为拖放可能会对所有对象产生影响,并且这种影响也应该设置动画 如何提高拖放性能?例如: 正方形在长按手势时移动。它的比例取决于它的中心x值。是否可以一次性计算并应用转换/缓存进行拖动?或者我应该使用其他东西,而不是核心动画 编辑 我使用以下项目作为拖放的原型: 根据其代码: - (void) didLongPressIcon:(UILongPressGes
- (void) didLongPressIcon:(UILongPressGestureRecognizer*) sender {
if ([self.scrollView isDragging]) {
return;
}
HMLauncherIcon *icon = (HMLauncherIcon*) sender.view;
if (sender.state == UIGestureRecognizerStateBegan) {
if (self.dragIcon == nil) {
[self longPressBegan:icon];
}
} else if (sender.state == UIGestureRecognizerStateChanged) {
CGPoint iconPoint = [sender locationInView:self];
if (self.dragIcon == icon) {
//Recalculate transform
[self longPressMoved:icon toPoint:iconPoint];
}
} else if (sender.state == UIGestureRecognizerStateEnded) {
if (self.dragIcon == icon) {
//Recalculate transform
[self longPressEnded:icon ];
}
} else if (sender.state == UIGestureRecognizerStateCancelled) {
if (self.dragIcon == icon) {
//Recalculate transform
[self longPressEnded:icon];
}
}
}
“重新计算变换”的含义如下:
[UIView animateWithDuration:... animations:^{
for (UIView *oneIcon in self.icons) {
CATransform3D transform = ...;//some calculations with icon.center.x
CGAffineTransform affineTransform = CATransform3DGetAffineTransform(transform);
oneIcon.transform = affineTransform;
}
}
如果您不显示代码,就不可能知道您的代码会得到怎样的改进。我希望现在对您来说它更清楚了您是有性能问题还是代码复杂性问题?性能问题是因为复杂的计算。在我添加3D变换之前,它似乎还可以。