未在 PDFView 子类上调用 drawRect

Posted

技术标签:

【中文标题】未在 PDFView 子类上调用 drawRect【英文标题】:drawRect not called on PDFView subclass 【发布时间】:2013-03-07 13:39:03 【问题描述】:

我有一个自定义的PDFView 子类,并覆盖了-mouseDown-mouseDragged 等以在视图上绘制一个矩形。这是我正在使用的代码:

@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】:

我有一个类似的用例。根据文档,改写 PDFView 的 drawPage 方法。继续在 PDFView 上调用 setNeedsDisplay。它有效,但它有点慢。现在改为覆盖视图。

【讨论】:

这正是我需要的帮助。谢谢!

以上是关于未在 PDFView 子类上调用 drawRect的主要内容,如果未能解决你的问题,请参考以下文章

drawRect 在 UIView 子类上被调用,但不在 UIViewController 上

UIView 子类:drawRect 未调用

UIView drawRect 未在自动旋转时调用

如何在 UIButton 子类中覆盖 -drawrect?

XIB 中的 UIView 子类不显示(drawRect:从未调用)

在swift中子类化'PDFView' - 找不到接口声明