Базовый график: курсор не настраивается по CPTGraphHostingView - PullRequest
0 голосов
/ 10 марта 2019

Я использую Core Plot в двух приложениях macOS (первое старое, второе новое). Каждый из них имеет CPTGraphHostingView, где отображаются некоторые графики. Я могу нажать, удерживать и перетащить, чтобы изменить видимую область.

В первом приложении при наведении курсора на график курсор меняется на открытую руку. Это также изменяется на закрытую руку, когда я тяну. Это то, что я хочу, и это поведение во всех типовых приложениях Core Plot.

Во втором приложении курсор всегда остается неизменным (стрелка).

Редактировать : Вот снимок экрана иерархии представления в XCode (представления позади представления графика скрыты). Перед CPTGraphHostingView нет вида, только несколько элементов управления находятся выше в иерархии видов, но они расположены вокруг графика.

view hierachy

Я не смог найти никакой разницы между моими двумя приложениями (или вторым приложением и примерами приложений), которые могли бы вызвать это. Оба приложения компилируются с Xcode 10.1 и веткой Core Plot release-2.3.

Что мне искать?

Ответы [ 2 ]

1 голос
/ 13 марта 2019

Убедитесь, что нет других невидимых представлений, скрывающих представление хостинга Core Plot.Все ли во втором приложении (макет, внешний вид и т. Д.) Работает так, как вы ожидаете?

0 голосов
/ 04 мая 2019

Так как initWithFrame из CPTGraphHostingView не вызывается во втором приложении, ручные курсоры всегда nil и не могут быть отрегулированы.Это из документов Apple для " Создание пользовательского представления ":

Просмотр экземпляров, созданных в Интерфейсном Разработчике, не вызывает initWithFrame: когда загружаются их файлы пера, которыечасто вызывает путаницу.Помните, что Interface Builder архивирует объект при сохранении файла пера, поэтому экземпляр представления уже будет создан, а initWithFrame: уже будет вызван.

Метод awakeFromNib обеспечивает возможность инициализации представлениякогда он создается в результате загрузки файла пера.Когда загружается файл пера, содержащий объект представления, каждый экземпляр представления получает сообщение awakeFromNib, когда все объекты разархивированы.Это предоставляет объекту возможность инициализировать любые атрибуты, которые не заархивированы с объектом в Интерфейсном Разработчике.

Таким образом, я подклассифицировал 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
...