核心图:光标无法通过CPTGraphHostingView进行调整

时间:2019-03-10 14:18:51

标签: objective-c macos core-plot appkit

我在两个macOS应用程序中使用Core Plot(第一个是旧的,第二个是新的)。它们每个都有一个CPTGraphHostingView,其中显示了一些图。我可以单击,按住并拖动以更改可见区域。

在第一个应用程序中,当我将鼠标悬停在绘图上时,光标变为张开的手。当我拖动时,它也会变成闭合的手。这就是我想要的,这是Core Plot的所有示例应用程序中的行为。

在第二个应用程序中,光标始终保持不变(箭头)。

编辑:这是Xcode中视图层次结构的屏幕截图(绘图视图后面的视图被隐藏)。 CPTGraphHostingView前面没有视图,视图层次结构中只有几个控件位于较高位置,但它们位于绘图周围。

view hierachy

我找不到两个应用程序(或第二个应用程序和示例应用程序)之间可能导致此问题的任何差异。这两个应用程序均使用Xcode 10.1和Core Plot release-2.3分支进行编译。

我应该找什么?

2 个答案:

答案 0 :(得分:1)

检查是否没有其他不可见的视图遮盖Core Plot托管视图。第二个应用程序中的其他所有内容(布局,外观等)是否都按您期望的方式工作?

答案 1 :(得分:0)

由于在我的第二个应用程序中没有调用initWithFrame中的CPTGraphHostingView,因此手动光标总是nil且无法调整。这来自Apple的“ Creating a Custom View”文档:

  

在Interface Builder中创建的视图实例不会调用   initWithFrame:加载其笔尖文件时,通常会导致   混乱。请记住,Interface Builder在将对象归档时会对其进行归档   保存一个nib文件,因此视图实例将已经创建   和initWithFrame:将已经被调用。

     

awakeFromNib方法提供了提供机会   由nib文件创建的视图的初始化   正在加载。加载包含视图对象的nib文件时,   当所有的视图实例都接收到awakeFromNib消息时   对象已取消存档。这为对象提供了机会   初始化未随对象一起归档的任何属性   界面生成器。

因此,我使用Eric Skroch的建议将CPTGraphHostingView子类化,并从NSCursor中的awakeFromNib加载了游标:

MyGraphHostingView.h:

#import <CorePlot/CorePlot.h>

NS_ASSUME_NONNULL_BEGIN

@interface MyGraphHostingView : CPTGraphHostingView

@end

NS_ASSUME_NONNULL_END

MyGraphHostingView.m:

#import "MyGraphHostingView.h"

@implementation MyGraphHostingView

-(void)awakeFromNib
{
    [super awakeFromNib];

    if (!self.closedHandCursor) {
        self.closedHandCursor  = [NSCursor closedHandCursor];
    }
    if (!self.openHandCursor) {
        self.openHandCursor    = [NSCursor openHandCursor];
    }
    self.allowPinchScaling = YES;
}

@end