繁体   English   中英

改变Cocoa的窗口大小?

[英]Change size of window in Cocoa?

我有一个窗口,当用户点击它时我需要更改它的大小。 我正在使用[self setFrame:windowFrame display:YES animate:YES]来完成此任务。

即使窗口成功地改变了大小(我增加了它的高度),它也会向上移动窗口的内容。 我该如何防止这种情况发生? 我希望内容保持不变。

我在OSX Mountain Lion上使用Objective-C和Cocoa为OSX开发应用程序。

编辑:约束和/或弹簧和Struts将无法工作,因为我需要在调整窗口大小后移动内容。

如果您使用Interface Builder来构建这些视图,那么我认为一种方法是设置“struts和spring”。 这些在“尺寸检查器”下可用,并且是“自动调整”标签上方的红色箭头和条形。 玩这些以获得您想要的效果,但一般的想法是箭头控制视图的大小如何调整父视图的大小的变化,并且条控制视图的边缘的关系随着大小的变化,到父视图的边缘。

约束和/或Springs和Struts不起作用,因为我需要在调整窗口大小后移动内容。

在这种情况下,您应该使用NSViewAnimation

单个视图动画实际上可以对多个视图执行多个动画,您甚至可以对窗口执行一个动画,尽管类的名称和窗口不是Cocoa中的视图这一事实。

使用initWithViewAnimations:创建一个视图动画,它采用一系列字典 每个字典标识目标( NSViewAnimationTargetKey )以及如何处理它:更改目标的帧( NSViewAnimationStartFrameKeyNSViewAnimationEndFrameKey )或淡入或淡出目标( NSViewAnimationEffectKey )。 对于您的情况,您将更改目标的框架。

当用户执行导致窗口大小调整的事物时,您需要计算窗口所需的整体大小(注意调整其框架的位置,使其不会在屏幕上生长),以及新视图 - 视图的位置和大小。 将移动和/或改变大小的所有内容,为其创建字典并将其放入数组中。 然后创建视图动画。

NSViewAnimation是一种NSAnimation ,它提供了启动和停止动画,监视其进度,挂钩动画以及将多个NSAnimations链接在一起的所有方法。 如果没有别的,你需要开始动画

在基于约束的布局中,将窗口边缘周围的视图设置为与其超视图边缘的固定距离。

Xcode将从中推断出很多可恢复性; 如果仍然没有正确调整大小,请调整其约束,使其宽度和/或高度不再恒定。

最简单的方法是移动视图,直到编辑器中出现蓝线。 每条蓝线对应于HIG中关于事物应该如何显示的规则,如果您将视图放在那里,Xcode将创建符合这些准则的约束。 例如,如果您将视图从其超级视图的右边缘设置了20个点,那么您将获得一条蓝线,如果您将视图放在那里,您将创建一个约束,该视图必须保持该视图的距离那边缘。

superview不是唯一可以创建基于HIG的约束的视图。 您还可以在兄弟视图之间创建指南约束。 例如,如果您将一个按钮放在另一个按钮旁边的适当距离处,那么您将在该距离上获得一条蓝线,如果您放下它,您将创建一个约束,即这两个按钮必须与每个按钮保持距离。其他。

如果你想做一些真正自定义的东西,nib编辑器右下角的三个按钮可以让你创建你想要的任何约束。 您选择的内容决定了您可以创建的约束; 笔尖编辑器的大纲视图将帮助您确保获得所需的选择。

您将不得不遍历所有子视图并根据窗口框架的增量更改其框架位置。

因此,如果您在所有方向上将窗口框架扩展20,则所有子视图都必须将其框架位置增加(20,20)以抵消窗口移动。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM