# HG changeset patch # User koda # Date 1297985461 -3600 # Node ID 076767e86f2b56a301957a5f000c158983b43510 # Parent 541d35d1f2e896b04e86ca16bc80739a0739e7b7 better ammomenu window dragging algorithm (as suggested by iphonedevelopertips) diff -r 541d35d1f2e8 -r 076767e86f2b project_files/HedgewarsMobile/Classes/AmmoMenuViewController.h --- a/project_files/HedgewarsMobile/Classes/AmmoMenuViewController.h Fri Feb 18 00:21:36 2011 +0100 +++ b/project_files/HedgewarsMobile/Classes/AmmoMenuViewController.h Fri Feb 18 00:31:01 2011 +0100 @@ -32,7 +32,7 @@ uint8_t *delay; BOOL *shouldUpdateImage; - CGPoint startingPoint; + CGPoint currentPoint; CGPoint placingPoint; BOOL isVisible; } diff -r 541d35d1f2e8 -r 076767e86f2b project_files/HedgewarsMobile/Classes/AmmoMenuViewController.m --- a/project_files/HedgewarsMobile/Classes/AmmoMenuViewController.m Fri Feb 18 00:21:36 2011 +0100 +++ b/project_files/HedgewarsMobile/Classes/AmmoMenuViewController.m Fri Feb 18 00:31:01 2011 +0100 @@ -316,7 +316,7 @@ if (IS_IPAD() && [touches count] == 1) { self.view.layer.borderWidth = 3.5; - startingPoint = [[[allTouches allObjects] objectAtIndex:0] locationInView:self.view]; + currentPoint = [[[allTouches allObjects] objectAtIndex:0] locationInView:self.view]; } if (IS_IPAD() == NO) @@ -327,17 +327,31 @@ self.view.layer.borderWidth = 1.3; } +// better window dragging implementation by +// http://iphonedevelopertips.com/graphics/drag-an-image-within-the-bounds-of-superview.html -(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { - NSSet *allTouches = [event allTouches]; - if (IS_IPAD() && [touches count] == 1) { - CGPoint touchedPoint = [[[allTouches allObjects] objectAtIndex:0] locationInView:self.view]; - CGFloat deltaX = touchedPoint.x - startingPoint.x; - CGFloat deltaY = touchedPoint.y - startingPoint.y; + // Get active location upon move + CGPoint activePoint = [[touches anyObject] locationInView:self.view]; + + // Determine new point based on where the touch is now located + CGPoint newPoint = CGPointMake(self.view.center.x + (activePoint.x - currentPoint.x), + self.view.center.y + (activePoint.y - currentPoint.y)); - //startingPoint = touchedPoint; - self.view.frame = CGRectMake(self.view.frame.origin.x + deltaX, self.view.frame.origin.y + deltaY, - self.view.frame.size.width, self.view.frame.size.height); + // Make sure we stay within the bounds of the parent view + float midPointX = CGRectGetMidX(self.view.bounds); + if (newPoint.x > self.view.superview.bounds.size.width - midPointX) + newPoint.x = self.view.superview.bounds.size.width - midPointX; + else if (newPoint.x < midPointX) + newPoint.x = midPointX; + + float midPointY = CGRectGetMidY(self.view.bounds); + if (newPoint.y > self.view.superview.bounds.size.height - midPointY) + newPoint.y = self.view.superview.bounds.size.height - midPointY; + else if (newPoint.y < midPointY) + newPoint.y = midPointY; + + self.view.center = newPoint; } }