未在 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 上