Cocoa系列教学四:Sizing Policy 和其他
时间: 2009-06-11 19:27 点击: 次
上次我们的程序在Window中创建了一个Button,如果这个Button是作为Window的ContentView的时候, 当你改变窗口的时候, 这个Button的大小也跟着改变,而且总是充满了整个Window,但是如果你通过
上次我们的程序在Window中创建了一个Button,如果这个Button是作为Window的ContentView的时候, 当你改变窗口的时候, 这个Button的大小也跟着改变,而且总是充满了整个Window,但是如果你通过NSView addSubview:把这个Button添加到窗口中的时候, 当你改变窗口大小的时候, 这个Button的位置和大小始终不变,所以当你的窗口的宽度小于Button的Left时,Button就消失了。
熟悉Java或者Unix下面GUI编程的人可能会使用Layout机制来解决这个问题,熟悉Windows的人可能会想到使用OnSize事件来处理这个问题, Cocoa的确在窗口或者Parent View的大小改变的时候发送通知,但是在Cocoa中我们还有另外一种处理方法,这个方法可以称作Sizing Policy,意思是在窗口改变的时候, 对应的Child View或者Control应该如何响应这个改变。
NSView类有一个方法setAutoresizingMask:这个方法可以用来控制NSView对父窗口或者Parent View的Size Change事件做什么样的处理。这个方法有一个参数,可以是下面列出的常量的一个或者几个的组合。
-
NSViewNotSizable = 0,
-
NSViewMinXMargin = 1,
-
NSViewWidthSizable = 2,
-
NSViewMaxXMargin = 4,
-
NSViewMinYMargin = 8,
-
NSViewHeightSizable = 16,
-
NSViewMaxYMargin = 32
通过这个函数,我们就可以控制程序中的Button如何响应Window的Size Change事件了,下面我们看看修改后的main函数。
-
int main(int argc, char *argv[])
-
{
-
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
-
[NSApplication sharedApplication];
-
-
//Create main window
-
NSRect rc = NSMakeRect(0, 0, 400, 200);
-
NSUInteger uiStyle = NSTitledWindowMask | NSResizableWindowMask | NSClosableWindowMask;
-
NSBackingStoreType backingStoreStyle = NSBackingStoreBuffered;
-
NSWindow* win = [[NSWindow alloc] initWithContentRect:rc styleMask:uiStyle backing:backingStoreStyle defer:NO];
-
[win setTitle:@"HelloWin Test"];
-
NSButton* button = [[NSButton alloc] initWithFrame:NSMakeRect(160, 20, 80, 35)];
-
[button setTitle:@"Quit"];
-
-
NSView* contentView = [win contentView];
-
MyController* controller = [[MyController alloc] init];
-
-
[[win contentView] addSubview:button];
-
[contentView setAutoresizesSubviews:YES];
-
[button setAutoresizingMask:NSViewMaxXMargin | NSViewMinXMargin | NSViewMaxYMargin
顶一下(17)
89.5%
踩一下(2)
10.5%
发表评论
本类文章点击排行榜
- [06-11] Objective-C语法快速参考
- [01-20] iPhone App开发官方视频教程
- [03-12] 中文版iTunes Connect开发者指南
- [06-11] Cocoa系列教学一:使用代码创
- [06-11] XCode 3.0及Cocoa初级教程
- [06-11] Cocoa系列教学二:Cocoa处理消息
- [04-02] 将自己开发的app打包成ipa装入
- [01-20] App推广码(promotion code)全面总
- [06-11] 初学者:介绍NSLog的使用
推荐内容
最近更新
- [07-13] 生成随机guid串的代码
- [07-12] UIScrollView里判断动画结束的方法
- [07-12] iPhone 开发中定义全局的结构指针
- [07-08] 一行代码判断运行应用的机器是IOS4还是IOS3
- [07-06] 动画循环播放并记录播放次数的代码
- [07-02] 使用 Xcode Debug 时查看全局变量的方法
- [06-29] 去掉App自动添加的图标半透明效果的方法
- [06-24] 苹果开发入门介绍:UINavigationController
- [06-23] Mac程序开发基础:得到一个目录内的内容


App推广码(promotion code)全面总结
iPhone App开发官方视频教程
Cocoa系列教学一:使用代码创建窗口
Objective-C语法快速参考
教学:如何实现拖拽文件到NSTableView中