UIBezierPathOvalSegment/Pod/Classes/UIBezierPath+OvalSegment.m
2016-01-19 12:59:36 +01:00

44 lines
1.7 KiB
Objective-C

//
// UIBezierPath+OvalSegment.m
//
// Created by Giuseppe Nucifora on 19/01/16.
// Copyright © 2016 Giuseppe Nucifora All rights reserved.
//
#import "UIBezierPath+OvalSegment.h"
@implementation UIBezierPath (OvalSegment)
+ (UIBezierPath *)bezierPathWithOvalInRect:(CGRect)rect startAngle:(CGFloat)startAngle endAngle:(CGFloat)endAngle angleStep:(CGFloat)angleStep {
CGPoint center = CGPointMake(CGRectGetMidX(rect), CGRectGetMidY(rect));
CGFloat xRadius = CGRectGetWidth(rect)/2.0f;
CGFloat yRadius = CGRectGetHeight(rect)/2.0f;
UIBezierPath *ellipseSegment = [UIBezierPath new];
CGPoint firstEllipsePoint = [self ellipsePointForAngle:startAngle withCenter:center xRadius:xRadius yRadius:yRadius];
[ellipseSegment moveToPoint:firstEllipsePoint];
for (CGFloat angle = startAngle + angleStep; angle < endAngle; angle += angleStep) {
CGPoint ellipsePoint = [self ellipsePointForAngle:angle withCenter:center xRadius:xRadius yRadius:yRadius];
[ellipseSegment addLineToPoint:ellipsePoint];
}
CGPoint lastEllipsePoint = [self ellipsePointForAngle:endAngle withCenter:center xRadius:xRadius yRadius:yRadius];
[ellipseSegment addLineToPoint:lastEllipsePoint];
return ellipseSegment;
}
+ (UIBezierPath *)bezierPathWithOvalInRect:(CGRect)rect startAngle:(CGFloat)startAngle endAngle:(CGFloat)endAngle {
return [UIBezierPath bezierPathWithOvalInRect:rect startAngle:startAngle endAngle:endAngle angleStep:M_PI/20.0f];
}
+ (CGPoint)ellipsePointForAngle:(CGFloat)angle withCenter:(CGPoint)center xRadius:(CGFloat)xRadius yRadius:(CGFloat)yRadius {
CGFloat x = center.x + xRadius * cosf(angle);
CGFloat y = center.y - yRadius * sinf(angle);
return CGPointMake(x, y);
}
@end