2013-03-07 4 views
0

У меня есть подкатегория PDFView и переопределены -mouseDown, -mouseDragged и т. Д., Чтобы нарисовать прямоугольник над представлением. Вот код, я использую:drawRect не вызван подклассом PDFView

@implementation MyPDFView { 
    NSPoint clickLocation; 
    NSRect selection; 
} 

- (void)mouseDown:(NSEvent *)theEvent { 
    NSPoint clickLocationOnWindow = [self.window mouseLocationOutsideOfEventStream]; 
    clickLocation = [self convertPoint:clickLocationOnWindow fromView:nil]; 

    NSLog(@"%@", NSStringFromPoint(clickLocation)); 
} 

- (void)mouseDragged:(NSEvent *)theEvent { 
    NSPoint mouseLocationOnWindow = [self.window mouseLocationOutsideOfEventStream]; 
    NSPoint currentLocation = [self convertPoint:mouseLocationOnWindow fromView:nil]; 

    CGFloat lowerX = fmin(clickLocation.x, currentLocation.x); 
    CGFloat lowerY = fmin(clickLocation.y, currentLocation.y); 
    CGFloat upperX = fmax(clickLocation.x, currentLocation.x); 
    CGFloat upperY = fmax(clickLocation.y, currentLocation.y); 

    selection = NSMakeRect(lowerX, lowerY, upperX-lowerX, upperY-lowerY); 

    [self setNeedsDisplay:YES]; 

    NSLog(@"%@", NSStringFromRect(selection)); 
} 

- (void)drawRect:(NSRect)dirtyRect 
{ 
    // Drawing code here. 
    NSLog(@"drawRect"); 

    NSBezierPath *bp = [NSBezierPath bezierPathWithRect:selection]; 
    [[NSColor blueColor] set]; 
    [bp fill]; 
} 

@end 

NSRect рассчитывается правильно, но когда я называю [self setNeedsDisplay], -drawRect никогда не вызывается, и прямоугольник никогда не обращается.

Есть ли причина, почему -drawRect никогда не вызывается в подклассе PDFView?

ответ

1

У меня есть аналогичный прецедент. Согласно документам, переопределите метод drawPage PDFView. Продолжить вызов setNeedsDisplay в PDFView. Он работает, но он немного медленный. Вместо этого работаем над наложением вида прямо сейчас.

+0

Это была именно помощь, в которой я нуждался. Спасибо! – colincameron