我有一个UIView(我的主视图的子视图),它跟随我在屏幕上的触摸点。
此视图在移动时通过drawRect不断重绘。在程序中的某些时候(比如它已被拖过垃圾桶),我希望通过删除我的基础数据对象并将其从超级视图中删除来删除子视图。
问题在于,当我的控制器调用removeFromSuperview时,我有时会遇到崩溃,因为视图仍在忙于在drawRect中重绘。
我告诉子视图将自己从超级视图中移除之前,我已经在我的控制器中绕过了这一点。但是,我想知道是否有更清洁的方法吗?我不喜欢'延迟'在应用中修复同步问题。
编辑:用于跟踪对象移动的ViewController代码...通过委托来自视图的touchesMoved()调用...
-(void)objectMoved:(UITrackObjectView *)trackObject
centerPoint:(CGPoint)centerPoint:
{
[_objectController updateObjectPosition:centerPoint];
[annotationObject setNeedsDisplay];
}
当对象出现删除时......
-(void)removeObject:(UITrackObjectView*)trackObject
{
// CAUSES CRASH SOMETIMES IF VIEW STILL REDRAWING
// [droppedObject removeFromSuperview];
[_objectController removeObject:droppedObject];
// CALL THIS WAY TO 'FIX'
[self performSelector:@selector(delayedTest:) withObject: trackObject afterDelay:0.25];
}
-(void)delayedTest:(UITrackObjectView*) trackObject
{
[trackObject removeFromSuperview];
}
视图确实是绘图,因为它使用CoreGraphics进行绘图并根据其位置给出反馈。虽然我知道drawRect是低效的,但由于要进行线框绘制,我无法做位图。