核心图:光标不会调整CPTGraphHostingView

问题描述 投票:0回答:2

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

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

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

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

view hierachy

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

我应该寻找什么?

objective-c macos core-plot appkit
2个回答
1
投票

检查是否有任何其他不可见的视图模糊了Core Plot托管视图。第二个应用程序中的所有其他内容(布局,外观等)是否按预期方式工作?


0
投票

由于initWithFrameCPTGraphHostingView在我的第二个应用程序中没有被调用,手咒语总是nil并且无法调整。这是来自Apple的“Creating a Custom View”文档:

在Interface Builder中创建的视图实例不会调用initWithFrame:加载它们的nib文件时,这通常会导致混淆。请记住,Interface Builder在保存nib文件时会归档对象,因此已经创建了视图实例,并且已经调用了initWithFrame:。

awakeFromNib方法提供了一个机会,可以在加载nib文件时创建视图的初始化。当加载包含视图对象的nib文件时,每个视图实例在取消归档所有对象时都会收到awakeFromNib消息。这为对象提供了初始化未使用Interface Builder中的对象存档的任何属性的机会。

因此,我使用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
© www.soinside.com 2019 - 2024. All rights reserved.