代码之家  ›  专栏  ›  技术社区  ›  Dirk

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

  •  0
  • Dirk  · 技术社区  · 7 年前

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

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

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

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

    view hierachy

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

    我应该找什么?

    0 回复  |  直到 6 年前
        1
  •  1
  •   Eric Skroch    7 年前

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

        2
  •  0
  •   Dirk    6 年前

    自从 initWithFrame 属于 CPTGraphHostingView 在我的第二个应用程序中没有被调用,手诅咒器总是 nil 而且无法调整。这是苹果公司的文档中的“ Creating a Custom View ":

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

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

    所以我分类了 CPTGraphHostingView 并从 NSCursor 在里面 awakeFromNib ,使用Eric Skroch的建议:

    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