在Xcode 5 OSX中,而不是ios,我创建了一个视图并设置了自动布局约束,以便视图的边与框架保持固定的距离。通过在运行时拖动窗口的角来正确拉伸视图,但视图的内容大小保持固定。内容由Bezier路径组成。缩小可以裁剪内容,并且扩展会在不变的内容旁边提供大量的开放空间。
我还注意到,在尺寸检查器中更改窗口的小彩色窗口中的初始位置不会改变窗口在运行时的位置。它出现在上一次运行中留在的相同位置。尺寸也保持不变。然后它可以在屏幕上移动和调整大小,并在下次运行时显示在那里。
如何使内容与视图和窗口一起缩小或膨胀?
如何让Window的Size Inspector控制屏幕上的初始位置?
提前致谢。
答案 0 :(得分:0)
您可能会在代码中绘制视图的内容。你可以随意选择这样做。如果您希望以某种方式通过视图的宽高比改变绘图,请将该逻辑合并到您的代码中。
您还可以将视图的bounds
rect设置为与其frame
rect不同。设置边界后,它们将不再自动与帧保持同步。因此,从边界到帧的转换将不再是1对1映射。当您更改框架时,并且如果边界不会更改以跟踪该框架,则映射将有效地缩放视图的内容。
决定边界应该取决于你。例如,您可以将其设置为单位rect(原点为(0,0),大小为1x1)。显然,您需要在绘图代码中考虑坐标系。
请参阅View Programming Guide: View Geometry。
关于窗口大小:您已为窗口设置了自动保存名称。其目的是保存窗口位置,并在下次显示窗口时将其恢复。如果您不想要这种行为,请不要设置(即清除)窗口的自动保存名称。
答案 1 :(得分:0)
@JeremyP:谢谢你的指导。
这是有效的。如果它很有意思,这段代码和我的评论可以在cocoa-dev@lists.apple.com,9/29/2014 8:35 PM中看到,关于使用Graham Cox大纲的成功。在这里包括它将是漫长的并且可能引起混淆。
// scale the content to track the frame
{
NSBezierPath *path;
NSRect bounds;
CGFloat scaleX,scaleY;
}
scaleX =NSWidth(bounds)/NSWidth([path bounds]);
scaleY =NSHeight(bounds)/NSHeight([path bounds]);
NSAffineTransform* tfm = [[NSAffineTransform alloc] init];
[tfm scaleXBy:scaleX yBy:scaleY];
NSBezierPath* temp = [tfm transformBezierPath:path];
// [tfm concat];
[temp stroke];