У меня есть изображение, к которому я добавил определенные пользовательские подпункты в виде точек.Существует также NSMutableArray, куда я добавляю соответствующий CGPoint.Я также добавляю установить тот же CGPoint, что и свойство в настраиваемом подпредставлении точки.
Когда я пытаюсь удалить случайную точку из общей суммы в массиве, я удаляю ее как из массива, так и удаляю соответствующее подпредставление из ImageView.если его свойство datapoint совпадает с тем же, которое было в массиве по этому индексу.
Это мой код в TouchStarted пользовательского ImageView для добавления точки данных.Существует также дополнительный код для сохранения последней добавленной точки желтого цвета, а старой - красной.
SBPointView *pointView = [[SBPointView alloc] initWithFrame:CGRectMake(touchPoint.x - kPointViewSize/2, touchPoint.y - kPointViewSize, 5, 5)];
pointView.backgroundColor = [UIColor yellowColor];
pointView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin;
CGSize imageSize = self.image.size;
CGRect frame = self.frame;
CGAffineTransform transform = self.transform;
CGAffineTransform scaleTransform = CGAffineTransformMakeScale(imageSize.width/frame.size.width, imageSize.height/frame.size.height);
transform = CGAffineTransformConcat(transform, scaleTransform);
CGPoint dataPoint = CGPointApplyAffineTransform(touchPoint, transform);//[mOfflineView convertPoint:touchPoint fromView:self];//[self convertPoint:touchPoint toView:mOfflineView];
NSLog(@"**** Datapoint = %@", NSStringFromCGPoint(dataPoint));
pointView.dataPoint = dataPoint;
[mDataPoints addObject:NSStringFromCGPoint(dataPoint)];
for (SBPointView *tempPointView in self.subviews) {
if ([tempPointView isKindOfClass:[SBPointView class]]) {
tempPointView.backgroundColor = [UIColor redColor];
}
}
[self addSubview:pointView];
[pointView release];
А вот мой код для удаления случайного PointView,
-(void)deleteDatapointAtIndex:(NSUInteger)index{
if (index < [mDataPoints count]) {
CGPoint dataPoint = CGPointFromString([mDataPoints objectAtIndex:index]);
for (SBPointView *subview in self.subviews) {
if ([subview isKindOfClass:[SBPointView class]]) {
if (subview.dataPoint.x == dataPoint.x && subview.dataPoint.y == dataPoint.y) {
[mDataPoints removeObjectAtIndex:index];
[subview removeFromSuperview];
break;
}
}
}
}
}
Но по какой-то причине я не знаю почему, я не могу удалить определенные точки данных из массива, а также удалить подпредставления и условие if не выполнено, я делаю что-то не так, что я не вижу.
ОБНОВЛЕНИЕ: Я попытался поместить NSLog в цикл for, чтобы проверить, какие все точки данных, с которыми я проверяю, и какой пункт данных, который я выбрал из индекса, выясняется, что в тех случаях, когда происходит сбой IfУ меня есть такая точка, {483.2, 601.6}, и это точки слева {483.2, 601.6}, {483.2, 681.6}.
Совершенно очевидно, что мой CGPoint такой же, как и первый {483.2, 601.6}
и в условии if я проверяю равенство f и x, и y обеих точек CGPoints, но условие if все еще не выполняется!это как-то связано с потерей точности при преобразовании CGPoint в строку и обратно?