How do I implement pinch to zoom to a parallax scrolling node
?
Pinch to zoom with CCParallaxNode
Asked Answered
is your question about scrolling and pinching, or do you know how to do the former but don't know how to apply that to a parallax layer? –
Suazo
@LearnCocos2D: Don't know how to apply that to a parallax node layer –
Overripe
Here's the solution:
- (void)handlePitchZoom:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch* touch1 = [[[event allTouches] allObjects] objectAtIndex:0];
UITouch* touch2 = [[[event allTouches] allObjects] objectAtIndex:1];
// calculate scale value
double prevDistance = ccpDistance([touch1 previousLocationInView:[touch1 view]], [touch2 previousLocationInView:[touch2 view]]);
double newDistance = ccpDistance([touch1 locationInView:[touch1 view]], [touch2 locationInView:[touch2 view]]);
CGFloat relation = newDistance / prevDistance;
CGFloat newScale = self.scale * relation;
if ((newScale >= minScale) && (newScale <= maxScale)) {
CGPoint touch1Location = [parallaxNode convertTouchToNodeSpace:touch1];
CGPoint touch2Location = [parallaxNode convertTouchToNodeSpace:touch2];
// calculate center point between two touches
CGPoint centerPoint = ccpMidpoint(touch1Location, touch2Location);
// store center point location (ScrollableView space)
CGPoint centerPointInParentNodeSpace = [self convertPoint:centerPoint fromNode:parallaxNode];
CGPoint oldPoint = ccp(centerPointInParentNodeSpace.x * (self.scale), centerPointInParentNodeSpace.y * (self.scale));
self.scale = newScale;
CGPoint newPoint = ccp(centerPointInParentNodeSpace.x * (self.scale), centerPointInParentNodeSpace.y * (self.scale));
CGPoint diff = ccp(oldPoint.x - newPoint.x , oldPoint.y - newPoint.y);
[parallaxNode setPosition:ccp(parallaxNode.position.x + (diff.x*(1/self.scale)), parallaxNode.position.y + (diff.y*(1/self.scale)))];
}
Hope it will help someone...
© 2022 - 2024 — McMap. All rights reserved.