Методы класса для графических обратных вызовов

Ссылка на метод

Чтобы использовать обычный метод класса в качестве обратного вызова для графического объекта, задайте свойство обратного вызова как указатель на функцию, ссылающийся на метод. Например,

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

Используя класс SeaLevelAdjuster

Класс использует изображение cape, которое включено с продуктом MATLAB. Чтобы получить данные изображения, используйте команду load:

load cape X map

После загрузки данных создайте объект SeaLevelSlider для изображения:

slaObj = SeaLevelSlider(X,map);

Переместите ползунок, чтобы изменить цветное отображение и визуализировать повышение уровня моря.

Похожие темы

Была ли эта тема полезной?