这与您的原始问题有点无关,而是一个字符串数组,如下所示:
NSArray *objectCoords = @[@"{{20,80},{5,5}}",
@"{{120,60},{5,5}}",
@"{{60,84},{5,5}}",
@"{{80,88},{5,5}}",
@"{{100,93},{5,5}}",
@"{{20,20},{5,5}}",
@"{{160,70},{5,5}}",
@"{{128,68},{5,5}}",
@"{{90,60},{5,5}}",
@"{{110,80},{5,5}}"];
我可能会建议使用 NSValue 对象数组:
NSArray *objectCoords = @[[NSValue valueWithCGRect:CGRectMake(20,80,5,5)],
[NSValue valueWithCGRect:CGRectMake(120,60,5,5)],
[NSValue valueWithCGRect:CGRectMake(60,84,5,5)],
[NSValue valueWithCGRect:CGRectMake(80,88,5,5)],
[NSValue valueWithCGRect:CGRectMake(100,93,5,5)],
[NSValue valueWithCGRect:CGRectMake(20,20,5,5)],
[NSValue valueWithCGRect:CGRectMake(160,70,5,5)],
[NSValue valueWithCGRect:CGRectMake(128,68,5,5)],
[NSValue valueWithCGRect:CGRectMake(90,60,5,5)],
[NSValue valueWithCGRect:CGRectMake(110,80,5,5)]];
然后,当您提取 CGRect 值时,而不是:
CGRect rect = CGRectFromString(objectCoords[index]);
你会这样做:
CGRect rect = [objectCoords[index] CGRectValue];
我知道这看起来更麻烦,但使用NSValue 会更有效(这在进行大量或重复计算距离时很有用)。
更好的是,您可能想要定义自己的模型对象,以便更直观地定义您要绘制图表的点,例如:
@interface ChartPoint : NSObject
@property (nonatomic) CGPoint center;
@property (nonatomic) CGFloat radius;
@end
和
@implementation ChartPoint
+ (instancetype) chartPointWithCenter:(CGPoint)center radius:(CGFloat)radius
{
ChartPoint *chartPoint = [[ChartPoint alloc] init];
chartPoint.center = center;
chartPoint.radius = radius;
return chartPoint;
}
- (CGFloat)distanceToPoint:(ChartPoint *)otherPoint
{
return hypotf(self.center.x - otherPoint.center.x, self.center.y - otherPoint.center.y);
}
@end
然后你可以像这样创建一个数组:
NSArray *objectCoords = @[[ChartPoint chartPointWithCenter:CGPointMake(20,80) radius:5],
[ChartPoint chartPointWithCenter:CGPointMake(120,60) radius:5],
[ChartPoint chartPointWithCenter:CGPointMake(60,84) radius:5],
[ChartPoint chartPointWithCenter:CGPointMake(80,88) radius:5],
[ChartPoint chartPointWithCenter:CGPointMake(100,93) radius:5],
[ChartPoint chartPointWithCenter:CGPointMake(20,20) radius:5],
[ChartPoint chartPointWithCenter:CGPointMake(160,70) radius:5],
[ChartPoint chartPointWithCenter:CGPointMake(128,68) radius:5],
[ChartPoint chartPointWithCenter:CGPointMake(90,60) radius:5],
[ChartPoint chartPointWithCenter:CGPointMake(110,80) radius:5]];
但是这个
显然,当你想画你的观点时,而不是这样做:
NSString *string = objectCoords[idx];
CGRect *rect = CGRectFromString(string);
CGContextAddEllipseInRect(context, rect);
你会这样做:
ChartPoint *point = objectCoords[idx];
CGContextAddArc(context, point.center.x, point.center.y, point.radius, 0, M_PI * 2.0, YES);