Authored by Justin R. Miller

fix for smoother RMCircle bounds change

... ... @@ -57,6 +57,8 @@
shapeLayer = [[CAShapeLayer alloc] init];
[self addSublayer:shapeLayer];
[self addAnimation:[CABasicAnimation animationWithKeyPath:@"sublayers"] forKey:@"sublayers"];
mapView = aMapView;
radiusInMeters = newRadiusInMeters;
... ... @@ -102,6 +104,9 @@
CGFloat offset = floorf(-lineWidthInPixels / 2.0f) - 2;
CGRect newBoundsRect = CGRectInset(rectangle, offset, offset);
BOOL sizeChanged = ( ! isnan(newBoundsRect.size.width) && ! isnan(newBoundsRect.size.height) && ! CGSizeEqualToSize(self.bounds.size, newBoundsRect.size));
[self setBounds:newBoundsRect];
// DLog(@"Circle Rectangle: %f, %f, %f, %f", rectangle.origin.x, rectangle.origin.y, rectangle.size.width, rectangle.size.height);
... ... @@ -110,10 +115,26 @@
CGPathAddEllipseInRect(newPath, NULL, rectangle);
circlePath = newPath;
[self.shapeLayer setPath:newPath];
[self.shapeLayer setFillColor:[fillColor CGColor]];
[self.shapeLayer setStrokeColor:[lineColor CGColor]];
[self.shapeLayer setLineWidth:lineWidthInPixels];
if (sizeChanged)
{
CAShapeLayer *newShapeLayer = [[[CAShapeLayer alloc] init] autorelease];
[newShapeLayer setPath:newPath];
[newShapeLayer setFillColor:[fillColor CGColor]];
[newShapeLayer setStrokeColor:[lineColor CGColor]];
[newShapeLayer setLineWidth:lineWidthInPixels];
[self addSublayer:newShapeLayer];
[self.shapeLayer removeFromSuperlayer];
self.shapeLayer = newShapeLayer;
}
else
{
[self.shapeLayer setPath:newPath];
[self.shapeLayer setFillColor:[fillColor CGColor]];
[self.shapeLayer setStrokeColor:[lineColor CGColor]];
[self.shapeLayer setLineWidth:lineWidthInPixels];
}
}
#pragma mark - Accessors
... ...