Чтобы использовать обычный метод класса в качестве коллбэка для графического объекта, задайте свойство коллбэка как указатель на функцию, ссылающийся на метод. Например,
uicontrol('Style','slider','Callback',@obj.sliderCallback)
Где ваш класс задает метод под названием sliderCallback
, и obj
является экземпляром вашего класса.
Чтобы использовать статический метод в качестве коллбэка, задайте свойство коллбэка как указатель на функцию, который включает имя класса, которое требуется, чтобы относиться к статическому методу:
uicontrol('Style','slider','Callback',@MyClass.sliderCallback)
Для обычных методов используйте запись через точку, чтобы передать экземпляр класса, задающего коллбэк в качестве первого аргумента:
@obj.methodName
Задайте метод коллбэка со следующими входными параметрами:
Экземпляр класса определения в качестве первого аргумента
Указатель источника события
Данные о событиях
Функциональная подпись имела бы эту форму:
function methodName(obj,src,eventData) ... end
Для статических методов необходимое имя класса гарантирует, что MATLAB® отправляет методу заданного класса:
@MyClass.methodName
Задайте статический метод коллбэка с двумя входными параметрами — указатель источника события и данные о событиях
Функциональная подпись имела бы эту форму:
function methodName(src,eventData)
Если вы хотите передать аргументы своему коллбэку в дополнение к исходным данным и аргументы данных о событиях, переданные MATLAB, можно использовать анонимную функцию. Базовый синтаксис для анонимной функции, которую вы присваиваете свойству Callback
графического объекта, включает объект как первый аргумент:
@(src,event)callbackMethod(object,src,eventData,arg1,...argn)
Функциональная подпись имела бы эту форму:
function methodName(obj,src,eventData,varargin) ... end
Этот пример показывает, как использовать метод вашего класса как коллбэк для ползунка uicontrol.
Класс SeaLevelSlider
создает ползунок, который отличается цветные пределы индексируемого изображения, чтобы дать иллюзию варьирования уровня моря.
Задайте SeaLevelSlider
как класс Handle со следующими участниками:
Свойства класса хранят фигуру и указатели осей и расчетные цветные пределы.
Конструктор класса создает графические объекты и присваивает коллбэк ползунка.
Функция обратного вызова для ползунка принимает эти три обязательных аргумента — экземпляр класса, указатель источника события и данные о событиях. Аргумент данных о событиях пуст и не используемый.
Коллбэк uicontrol использует запись через точку, чтобы сослаться на метод коллбэка: ...'Callback',@obj.sliderCallback
.
classdef SeaLevelSlider < handle properties Figure Axes CLimit end methods function obj = SeaLevelSlider(x,map) obj.Figure = figure('Colormap',map,... 'Position',[100,100,560,580],... 'Resize','off'); obj.Axes = axes('DataAspectRatio',[1,1,1],... 'XLimMode','manual','YLimMode','manual',... 'Parent',obj.Figure); image(x,'CDataMapping','scaled',... 'Parent',obj.Axes); obj.CLimit = get(obj.Axes,'CLim'); uicontrol('Style','slider',... 'Parent',obj.Figure,... 'Max',obj.CLimit(2)-10,... 'Min',obj.CLimit(1)-1,... 'Value',obj.CLimit(1),... 'Units','normalized',... 'Position',[0.9286,0.1724,0.0357,0.6897],... 'SliderStep',[0.003,0.005],... 'Callback',@obj.sliderCallback); end function sliderCallback(obj,src,~) minVal = get(src,'Value'); maxVal = obj.CLimit(2); obj.Axes.CLim = [minVal maxVal]; end end end
Класс использует изображение cape
, которое включено с продуктом MATLAB. Чтобы получить данные изображения, используйте команду load
:
load cape X map
После загрузки данных создайте объект SeaLevelSlider
для изображения:
slaObj = SeaLevelSlider(X,map);
Переместите ползунок, чтобы изменить цветное отображение и визуализировать повышение уровня моря.