Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 核心图:光标不在CPTGraphHostingView上调整_Objective C_Macos_Core Plot_Appkit - Fatal编程技术网

Objective c 核心图:光标不在CPTGraphHostingView上调整

Objective c 核心图:光标不在CPTGraphHostingView上调整,objective-c,macos,core-plot,appkit,Objective C,Macos,Core Plot,Appkit,我在两个macOS应用程序中使用Core Plot(第一个是旧的,第二个是新的)。它们都有一个CPTGraphHostingView,其中显示了一些绘图。我可以单击、按住并拖动以更改可见区域 在第一个应用程序中,当我浏览绘图时,光标变为张开的手。当我拖动时,它也会变为闭合的手。这就是我想要的,这也是Core Plot所有示例应用程序的行为 在第二个应用程序中,光标始终保持不变(箭头) 编辑:这里是Xcode中视图层次结构的屏幕截图(打印视图后面的视图是隐藏的)。CPTGraphHostingVi

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

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

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

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

我找不到我的两个应用程序(或第二个应用程序和示例应用程序)之间可能导致这种情况的任何差异。这两个应用程序都使用Xcode 10.1和Core Plot release-2.3版本编译


我应该寻找什么?

检查是否有任何其他不可见视图遮挡了核心打印宿主视图。第二个应用程序中的其他所有内容(布局、外观等)是否都按照您的预期工作?

由于
CPTGraphHostingView
initWithFrame
在我的第二个应用程序中未被调用,因此手动光标始终为
nil
,无法调整。这是苹果的文档中的“”:

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

awakeFromNib方法提供了一个提供 作为nib文件的结果创建视图时初始化视图 正在加载。加载包含视图对象的nib文件时, 当所有视图实例 对象已被取消归档。这为对象提供了一个机会 初始化未与中的对象一起存档的任何属性 界面生成器

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

MyGraphHostingView.h:

#import <CorePlot/CorePlot.h>

NS_ASSUME_NONNULL_BEGIN

@interface MyGraphHostingView : CPTGraphHostingView

@end

NS_ASSUME_NONNULL_END

我查看了视图层次结构,但在打印视图前面没有视图。其他一切都按预期进行。我在问题中添加了视图层次结构的图片。核心图在宿主视图上设置光标rect。检查视图层次结构中可能捕获光标或覆盖核心打印设置的任何其他内容。我发现
CPTGraphHostingView
initWithFrame
在我的第二个应用程序中没有被调用,因此手动光标总是
nil
。它在我的第一个应用程序中被调用。到目前为止我不知道为什么。然后,我将
CPTGraphHostingView
子类化,并从
NSCursor
中的
awakeFromNib
加载游标。这很有效。你认为
initWithFrame
没有被调用会有一些副作用吗?你在那里做一些额外的初始化。苹果的“创建自定义视图”文档中讨论了这个问题。这应该行得通。您可能还需要将
allowPinchScaling
设置为
YES
,以启用触控板上的按压手势。这是一个很好的建议,谢谢。如果你相应地更新你的答案,我可以接受。
#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