我在捏合手势期间使用CATransform3DMakeScale
调用来调整 CALayer 的大小,但每个转换调用都会从原始比例动画到目标比例。
由于我将值从捏合手势比例传递到转换调用,因此手势比例值的更新速度比导致卡顿的变换动画更快。
- (void)handlePinchGesture:(UIPinchGestureRecognizer *)gestureRecognizer {
if ([gestureRecognizer state] == UIGestureRecognizerStateChanged) {
pinchScale = [gestureRecognizer scale];
CALayer *layer = [self layer];
/* During pinching, this gets called again during the animation
of the last transformation */
layer.transform = CATransform3DMakeScale(pinchScale, pinchScale, 0);
}
}
如何阻止CATransform3DMakeScale
对变换进行动画处理?
您需要
禁用默认的CALayer
动画机制添加此行
layer.actions = @{@"position": [NSNull null],@"frame":[NSNull null],@"bounds":[NSNull null]};
在这个CALayer *layer = [self layer];
下面
或者您可以使用它获得相同的结果,这更好,因为仅为此更改禁用动画,然后启用动画,如@Duncan在他的评论中所说
[CATransaction begin];
[CATransaction setDisableActions:YES];
layer.transform = CATransform3DMakeScale(pinchScale, pinchScale, 0);
[CATransaction commit];