Хитрость заключается в том, чтобы не использовать функции, такие как 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')
При ручной установке пределов режим ограничения всегда устанавливается на ручной .
Ваша ставка, вероятно, заключается в использовании NSTextView и - (void) setShielColor: (NSColor *) color
.
При использовании получения селектора времени выполнения 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)
}
}
Если вы хотите установить цвет курсора вставки, а не курсора мыши, тогда предложение об использовании setInsertionPointColor:
должно сработать.
Однако не обязательно переходить с использования NSTextField
на NSTextView
. Редактором поля для окна, в котором находится NSTextField
, является NSTextView
. Итак, когда ваше NSTextField
станет ключевым представлением, вы можете взять редактор поля и вызвать для него setInsertionPointColor:
. Вам может потребоваться сбросить цвет, когда ваше поле перестанет быть ключевым представлением.
Вы можете получить редактор полей с помощью NSWindow
fieldEditor: forObject:
или NSCell
fieldEditorForView:
.
Если у вас есть подкласс NSTextField, вы можете использовать его собственный подкласс NSTextFieldCell и переопределить - (NSText *) setUpFieldEditorAttributes: (NSText *) textObj
. В этом методе вы можете установить цвет точки вставки один раз, и он останется, пока редактор поля для этого текстового поля активен. Хотя, когда редактор поля перемещается в другое поле редактирования, цвет точки вставки останется, пока вы его не сбросите.