Как ущипнуть / увеличить на cocos2d (Kobold2D) CCLayer
Я пытался реализовать стандартное пинч / масштабирование на CCLayer в cocos2d (используя распознаватели жестов Kobold2D), но с частичным успехом.
Ниже приведен мой код, который делает пинч / зум работать, пока точка защемления не сдвигается. Однако, если я увеличиваю одну точку на слое, а затем поднимаю и двигаю пальцы, чтобы увеличить еще одну точку, происходит мгновенный скачок слоя. Он переходит туда, где был бы слой, если бы я увеличивал масштаб второй точки с начала, а не просто плавно увеличивал масштаб с того места, где он был.
Можете ли вы увидеть, что я делаю неправильно, или я пропустил существующий простой алгоритм пинч / масштабирование, который делает эту работу для CCLayers?
NB. Я оставил значение по умолчанию (YES) для ignoreAnchorInPosition. Кроме того, в начале self.scalePrePinch = 1.0f
-(void) update:(ccTime)delta
{
KKInput* input = [KKInput sharedInput];
if (input.gesturePinchBegan) {
CGSize scr = [[CCDirector sharedDirector] screenSize];
CGPoint pinchLocation = [self convertToNodeSpace:input.gesturePinchLocation];
CGPoint anchor = ccp(pinchLocation.x/scr.width, pinchLocation.y/scr.height);
CGFloat newScale = input.gesturePinchScale * self.scalePrePinch;
self.anchorPoint = ccp(self.anchorPoint.x + self.scale / newScale * (anchor.x - self.anchorPoint.x),
self.anchorPoint.y + self.scale / newScale * (anchor.y - self.anchorPoint.y));
self.scale = newScale;
}
else
self.scalePrePinch = self.scale;
}