NSTextField - Белый текст на черном фоне, но черном курсоре

Хитрость заключается в том, чтобы не использовать функции, такие как scatter или plot, в анимации, а вместо этого изменять данные в графике, который уже существует. Эти функции всегда сбрасывают свойства осей, поэтому вы видите сброс представления. При изменении существующего графика оси не затрагиваются.

Функция scatter3 (как и все функции построения графиков) возвращает дескриптор графического объекта, который отображает график. В случае scatter3 этот дескриптор имеет три свойства, представляющие интерес здесь: XData, YData и ZData. Вы можете обновить эти свойства, чтобы изменить расположение точек:

N = 100;
data = randn(N,3) * 40;

h = scatter3(data(:,1),data(:,2),data(:,3));
for ii = 1:500
   data = data + randn(N,3);
   set(h,'XData',data(:,1),'YData',data(:,2),'ZData',data(:,3));
   drawnow
   pause(1/5)
end

Новый data также может быть совершенно другим, ему даже не нужно содержать одинаковое количество точек.

Но при изменении этих трех свойств вы увидите изменение свойств осей XLim, YLim и ZLim. То есть оси будут масштабироваться для размещения всех данных. Если вам нужно это предотвратить, установите для осей XLimMode, YLimMode и ZLimMode значение 'manual':

set(gca,'XLimMode','manual','YLimMode','manual','ZLimMode','manual')

При ручной установке пределов режим ограничения всегда устанавливается на ручной .

25
задан JJD 5 January 2012 в 00:33
поделиться

3 ответа

Ваша ставка, вероятно, заключается в использовании NSTextView и - (void) setShielColor: (NSColor *) color .

18
ответ дан 28 November 2019 в 17:43
поделиться

При использовании получения селектора времени выполнения Objective C, объединенного с решение uliwitness можно достигнуть его, не разделяя NSTextField на подклассы, здесь я использую RxCocoa methodInvoked в качестве примера:

import Cocoa
import RxCocoa

extension NSTextField {
    func withCursorColor(_ color: NSColor) {
        rx.methodInvoked(#selector(becomeFirstResponder))
            .subscribe(onNext: { [unowned self] _ in
                guard let editor = self.currentEditor() as? NSTextView else { return }
                editor.insertionPointColor = color
            })
            .disposed(by: rx.disposeBag)
    }
}

0
ответ дан 28 November 2019 в 17:43
поделиться

Если вы хотите установить цвет курсора вставки, а не курсора мыши, тогда предложение об использовании setInsertionPointColor: должно сработать.

Однако не обязательно переходить с использования NSTextField на NSTextView . Редактором поля для окна, в котором находится NSTextField , является NSTextView . Итак, когда ваше NSTextField станет ключевым представлением, вы можете взять редактор поля и вызвать для него setInsertionPointColor: . Вам может потребоваться сбросить цвет, когда ваше поле перестанет быть ключевым представлением.

Вы можете получить редактор полей с помощью NSWindow fieldEditor: forObject: или NSCell fieldEditorForView: .

Если у вас есть подкласс NSTextField, вы можете использовать его собственный подкласс NSTextFieldCell и переопределить - (NSText *) setUpFieldEditorAttributes: (NSText *) textObj . В этом методе вы можете установить цвет точки вставки один раз, и он останется, пока редактор поля для этого текстового поля активен. Хотя, когда редактор поля перемещается в другое поле редактирования, цвет точки вставки останется, пока вы его не сбросите.

14
ответ дан 28 November 2019 в 17:43
поделиться