0

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

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

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

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

查看层次结构

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

我应该寻找什么?

4

2 回答 2

1

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

于 2019-03-13T00:06:15.530 回答
0

由于在我的第二个应用程序中没有调用 of,因此手部光标始终initWithFrame无法调整。这是来自 Apple 的“创建自定义视图”文档:CPTGraphHostingViewnil

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

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

因此,我使用 Eric Skroch 的建议对in 中CPTGraphHostingView的游标进行了子类化并加载:NSCursorawakeFromNib

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
于 2019-05-04T05:42:01.933 回答