我有一個imageview,我已經添加了某些自定義子視圖。 還有一個NSMutableArray我添加相應的CGPoint。 我還添加了與自定義點子視圖中的屬性相同的CGPoint。CGPoint匹配失敗
當我嘗試從數組中刪除一個隨機點, 我將它從數組中刪除,並從ImageView中刪除相應的子視圖,如果它的datapoint屬性與數組中的同一個指數。
這是我在touchesStarted的自定義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;
}
}
}
}
}
但由於某些原因,我不知道爲什麼,我不能從數組中刪除某些數據點,並刪除subviews和if條件失敗,我在這裏做錯了什麼,我不能看到。
更新:我試圖把一個NSLog的for循環檢查什麼的所有數據點我檢查打擊和數據點我從指數選擇的是什麼, 原來在如果失敗 的情況下,即我有這樣一個點, {483.2,601.6},這些是剩下的{483.2,601.6},{483.2,681.6}點。
它很清楚,我的CGPoint是一樣的第一個{483.2,601.6}
,並在if條件我檢查兩個CGPoints平等˚Fx和y,但如果條件仍然失敗! 在將CGPoint轉換爲字符串並返回時,是否會出現精確丟失?
非常感謝! – 2012-03-27 10:41:25
「技術上更正確」的版本幾乎肯定不會使用FLT_EPSILON。請參閱[本博客文章](http://www.twistedape.me.uk/blog/2016/02/02/comparing-floating-point-numbers/),它解釋了爲什麼這幾乎總是錯誤的。 – alastair 2016-03-10 15:48:54