Caixa de seleção de desenho (rubberbanding, formigas marchando) em Cacau, ObjectiveC

Eu atualmente implementei uma caixa de seleção simples usando eventos de mouse e redesenho de um retângulo no mouse arrastar. Aqui está meu código:

-(void)drawRect:(NSRect)dirtyRect
{
if (!NSEqualRects(self.draggingBox, NSZeroRect))
{
    [[NSColor grayColor] setStroke];
    [[NSBezierPath bezierPathWithRect:self.draggingBox] stroke];
}
}

#pragma mark Mouse Events

- (void)mouseDown:(NSEvent *)theEvent
{
    NSPoint pointInView = [self convertPoint:[theEvent locationInWindow] fromView:nil];
    self.draggingBox = NSMakeRect(pointInView.x, pointInView.y, 0, 0);
    [self setNeedsDisplay:YES];
}

- (void)mouseDragged:(NSEvent *)theEvent
{
    NSPoint pointInView = [self convertPoint:[theEvent locationInWindow] fromView:nil];
    _draggingBox.size.width = pointInView.x - (self.draggingBox.origin.x);
    _draggingBox.size.height = pointInView.y - (self.draggingBox.origin.y);
    [self setNeedsDisplay:YES];
}

- (void)mouseUp:(NSEvent *)theEvent
{
    self.draggingBox = NSZeroRect;
    [self setNeedsDisplay:YES];
}

Ref:http://cocoadev.com/HowToCreateWalkingAnts

Questões:

Essa é a maneira mais eficiente de fazer isso? Se a visualização fosse complexa, seria mais eficiente desenhar uma visão transparente sobre a visualização principal em vez de redesenhar continuamente a visualização durante a duração do arrastamento do mouse (http://www.cocoabuilder.com/archive/cocoa/99877-drawing-selection-rectangle.html) Como isso é feito? Eu não consigo encontrar nenhum exemplo.

questionAnswers(4)

yourAnswerToTheQuestion