以编程方式在 UIPanel 中对齐轴句柄 - Matlab

Posted

技术标签:

【中文标题】以编程方式在 UIPanel 中对齐轴句柄 - Matlab【英文标题】:Aligning Axes Handle Within UIPanel Programatically - Matlab 【发布时间】:2015-10-24 12:27:55 【问题描述】:

uipanel 中对齐axes_h 句柄时遇到问题。我希望能够给我的图一个特定的大小,然后将它放在面板的中间,然后希望随后将我的uipanel 与我的数字对齐。我查看了文档,该示例仅在 figure 中对齐和分发 uicontrol 按钮。

这是我的代码:

%% create figure
fig_h = figure;
set(fig_h, 'Position', [100, 100, 1049, 895]);

%% create empty scatter plot within a panel
e_panel_position = [0.1 0.4 0.4 0.5];
e_panel_h = uipanel('Parent', fig_h, 'Title','Emotion','FontSize',12,'BackgroundColor','white','Position',e_panel_position);

axes_position = [0 0 0.7 0.8];
axes_h = axes('Parent', e_panel_h, 'Position', axes_position);
scatter_h = scatter(axes_h, [],[], 'MarkerEdgeColor',[0 .5 .5], 'MarkerFaceColor',[0 .7 .7],'LineWidth',1.5);
axis(axes_h, [-4 4 -4 4]);
align(axes_h, 'HorizontalAlignment', 'Center', 'VerticalAlignment', 'Middle');

编辑:

我正在努力使用align 函数让两个静态文本框和一个滑块在一条直线上对齐。我希望第一个文本框位于滑块的前面,第二个文本框位于滑块的另一侧,如下所示:

然后我希望能够从对齐对象中获取句柄并执行“Will”在下面建议的居中方法,以将所有三个项目作为一个集合组居中。这张图片说明了这一点,但这样做非常繁琐,因为我是手动完成的。但是,我需要为更多 uipanel 框中的更多滑块执行此操作,所以我认为这将是一种更快的方法。

这是我的代码:

%% create environment slider and text with panel
env_panel_position = [0.1 0.33 0.4 0.1];
env_panel_h = uipanel('Parent', fig_h, 'Title','Environment','FontSize',12,'BackgroundColor','white','Position',env_panel_position);

dark_text_position = [0 0 0.1 0.3];
dry_text_h = uicontrol('Parent', env_panel_h, 'Style', 'text', 'units', 'normalized', 'position', dark_text_position, 'String', 'dark');

dark_light_slider_position = [0 0 0.7 0.1];
dark_light_slider_h = uicontrol('Parent', env_panel_h, 'Style', 'slider', 'units', 'normalized', 'position', dark_light_slider_position);

wet_text_position = [0 0 0.1 0.3];
wet_text_h = uicontrol('Parent', env_panel_h, 'Style', 'text', 'units', 'normalized', 'position', wet_text_position, 'String', 'Light');

align_h = align([dry_text_h dark_light_slider_h wet_text_h], 'Distribute', 'Middle');

【问题讨论】:

【参考方案1】:

align 函数定位多个对象,因此它们在一行中。要将图形对象在其容器中居中,您只需为其提供正确的位置(以normalized 为单位),这是您正在创建的对象的默认值。

您的定义axes_position = [0 0 0.7 0.8]; 意味着axes_h 的宽度为uipanel 的70%,高度为80%。要将其居中,您只需将左下角坐标设置为跨容器的 15% 和容器上方的 10%:

axes_position = [0.15 0.1 0.7 0.8];

同样适用于 uipanel 的定位:

e_panel_position = [0.3 0.25 0.4 0.5];

【讨论】:

这是有道理的,也是我接下来需要解决的问题,因为我需要在另一个 uipanel 中放置一些 slider 对象并适当地对齐它们。我了解您的第一个示例,我已经实现了该示例,但我正在努力研究如何将其应用于其他大小的其他对象,即您有 0.30.25 用于 e_panel_position?我们在数学方面做了什么来解决这个问题? 通用计算为h.Position(1:2) = (1-h.Position(3:4))/2。居中的对象在其两侧具有相等的空间。容器中的空间总量的标准化长度为 1,因此左/下坐标需要是减去宽度/高度后剩下的一半。 谢谢,现在更有意义了。抱歉,但我已经编辑了我的帖子,因为我随后尝试将三个对象对齐在一条直线上,但没有成功。你能帮我进一步吗? alignDistribute 选项一起使用会保留您正在对齐的控件的极端,因此您仍然必须正确定位右侧文本。您当前的示例将它们设置为重叠,因此效果只是“平衡”重叠量。对于像这样更复杂的布局,为了避免手写计算,最好的选择是GUI Layout Toolbox(由 MathWorks 开发),它可以让您以更直接地反映您的意图的方式组织控件。

以上是关于以编程方式在 UIPanel 中对齐轴句柄 - Matlab的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式使用自动布局约束在视图中垂直对齐中间的子视图

以编程方式在TextView中设置文本对齐方式

以编程方式在 UICollectionView 内对齐 UILabel 大小

Xamarin 以编程方式在底部形成垂直对齐图像

使用自动布局(以编程方式)水平对齐 UIButton

以编程方式对齐 iPhone 键盘顶部的工具栏