Чтобы использовать обычный метод класса в качестве обратного вызова для графического объекта, укажите свойство обратного вызова в качестве дескриптора функции, ссылающегося на метод. Например,
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 как класс дескрипторов со следующими членами:
Свойства класса хранят дескрипторы фигур и осей и вычисленные пределы цвета.
Конструктор класса создает графические объекты и назначает обратный вызов ползунка.
Функция обратного вызова для ползунка принимает три обязательных аргумента - экземпляр класса, дескриптор источника события и данные события. Аргумент данных события пуст и не используется.
Обратный вызов 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);
Переместите ползунок, чтобы изменить цветовое отображение и визуализировать повышение уровня моря.
