Чтобы использовать метод обычного класса в качестве коллбэка для графического объекта, задайте свойство коллбэка как указатель на функцию, ссылающийся на метод. Для примера,
uicontrol('Style','slider','Callback',@obj.sliderCallback)
Где ваш класс определяет метод, называемый sliderCallback
и obj
является образцом вашего класса.
Чтобы использовать статический метод в качестве коллбэка, задайте свойство коллбэка как указатель на функцию, который включает имя класса, которое требуется для ссылки на статический метод:
uicontrol('Style','slider','Callback',@MyClass.sliderCallback)
Для обычных методов используйте запись через точку для прохождения образца класса, определяющего коллбэк как первый аргумент:
@obj.methodName
Задайте метод коллбэка со следующими входными параметрами:
Образец определяющего класса как первый аргумент
Указатель на источник события
The данных о событиях
Подпись функции будет иметь следующую форму:
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.
The 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);
Переместите ползунок, чтобы изменить отображение цвета и визуализировать повышение уровня моря.