我在两个macOS应用程序中使用Core Plot(第一个是旧的,第二个是新的)。它们每个都有一个CPTGraphHostingView
,其中显示了一些图。我可以单击,按住并拖动以更改可见区域。
在第一个应用程序中,当我将鼠标悬停在绘图上时,光标变为张开的手。当我拖动时,它也会变成闭合的手。这就是我想要的,这是Core Plot的所有示例应用程序中的行为。
在第二个应用程序中,光标始终保持不变(箭头)。
编辑:这是Xcode中视图层次结构的屏幕截图(绘图视图后面的视图被隐藏)。 CPTGraphHostingView
前面没有视图,视图层次结构中只有几个控件位于较高位置,但它们位于绘图周围。
我找不到两个应用程序(或第二个应用程序和示例应用程序)之间可能导致此问题的任何差异。这两个应用程序均使用Xcode 10.1和Core Plot release-2.3分支进行编译。
我应该找什么?
答案 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