Cocoa China 苹果开发中文站

苹果Mac OS X开发 iPhone开发 Cocoa以及Cocoa Touch

推荐使用Safari浏览器阅读本站

NSWindow

Cocoa教学:Windows OOP与Cocoa MVC之对比

封装不封装,这是个问题。 

今天我在看Cocoa开发者邮件列表的时候,看到一个帖子,求助如何在两个View之间互相通信的问题。做Windows程序员的时间长的我都不好意思说了,我意识到,这个问题在我刚刚接触到Mac上的Objective-C时也遇到过。

我现在可以提出这个问题的简化版:“我有一个对话框,获取了一些用户输入的数据。我现在需要从我那个对话框中把这个数据提取出来以供主窗口使用。如何才能从主窗口获取到对话框里的数据呢?”

点击这里阅读全文 »

新手Core Animation教学:窗口淡入淡出特效

Cocoachina介绍Core Animation相关的内容也蛮久的了,这次为大家奉献一个简单点的小程序,但是相信你一定用得着:在程序启动时,使用窗口淡入特效将窗口显示出来;在程序关闭或者窗口关闭时,使用窗口淡出效果将窗口隐藏。

当然,使用这个例子的特效的前提是你的程序是专门为Leopard开发的,如果想在Tiger实现,可能要麻烦点,因为例子中我们使用Core Animation去实现这个特效。

由于这个例子非常简单,而且比较实用,很适合初学者阅读,看看怎么做的然后在你自己的程序中加入这种很酷的效果吧。

点击这里阅读全文 »

小技巧:如何恢复显示关闭的窗口

在Mac OS中,点击窗口左上方的x,窗口将会关闭。如果你希望通过点击dock上的图标将窗口重新打开,你可以用如下方法做。

点击这里阅读全文 »

我们上次演示的程序在关掉了应用程序的窗口之后,应用程序并没有真正的退出,现在我们就来完成这个任务。

在Mac,Windows或者 Linux平台上,所有的GUI程序都可以称作消息驱动的,就是说整个应用程序就是在处理消息的循环中进行的,用户的操作或者系统发送的一些通知都会被送 到应用程序的消息处理循环中,比如用户通过键盘输入,用鼠标点击窗口等等,有些消息会直接派发给应用程序的对象,比如鼠标按下(MouseDown)的消 息就会直接被送给鼠标按下的那个窗口或者试图,但是有些消息会被系统首先解释,然后在生成其他的消息,比如用户用鼠标单击窗口Frame上的关闭按钮,这 个时候MouseDown事件并没有被送给应用程序的内部对象,而是在应用程序的消息循环中被解释成了窗口将要关闭的消息。

点击这里阅读全文 »

Cocoa系列教学一:使用代码创建窗口

作者:Cocoachina特约作者Younker

这次主要讲解一下如何通过编写代码的方式来实现一个窗口程序, 当然这个程序十分的简单, 不过它演示了一些我们应该了解的东西,因此应该可以更好的帮助我们了解XCode和Interface Builder为我们的开发工作做了哪些工作。 

大部分讲解Cocoa编程的书都会用到Xcode和Interface Builder,这两个工具的结合是开发Cocoa应用程序的最佳选择, 但是当中往往隐藏了许多细节的东西,为了对Cocoa的运作方式有更好的了解,我决定用代码来实现一些Interface Builder中Nib文件实现的部分功能,以此来研究Cocoa的运作方式。

点击这里阅读全文 »

一些源代码资源下载

今天介绍一些比较有用的源代码,你既可以把它们做为例子学习,也可以直接在你的项目里使用。

这些例子包括一个Core Animation文档中提及的动画菜单,一个高级点的Core Animation例子,一个Http服务器的例子以及一个如何设置“偏好设置”窗口的例子。希望对大家有用。

 

点击这里阅读全文 »

教程:如何以动画形式动态缩放窗口

Cocoa提供了一系列动画形式的窗口缩放特效,你也许经常能够看到他们,比如在Pages里的检查器,或是一些应用程序的系统预置中,在你选择不同选项的时候,你就会看到窗口以动画的形式自动改变大小。如何实现这种效果呢?请阅读本文。

 

点击这里阅读全文 »

小技巧:在程序未被激活时不隐藏Panel

NSPanel这种窗口形式有一个很讨厌的地方,在其他程序激活的时候,自身就会隐藏。如何关掉这种隐藏效果呢? 

其实只要在awakeFromNib中,加入如下代码:
 
[panel setHidesOnDeactivate: NO];
 
就可以防止在其他程序激活时,自身被自动隐藏了。

小技巧:使NSPanel窗口正确响应托管事件

在Interface Builder中默认设置的NSPanel会自动截获窗口的托管事件响应,你可以拖拽窗口的其他部位对窗口进行移动,可是这样一来,你自定义的托管操作就无法响应了。

其实这是Interface Builder默认设置的问题,在Interface Builder设置里,只要确保”Utility window””Non Activating Panel“都是选中的,就可以保证NSPanel对消息的正确响应。这一设置对Leopard的HUD类型窗口同样有效。

小技巧:如何关闭sheet窗口

有时候你发现打开的Sheet窗口无法关闭,看看下面的技巧:

在执行过[NSApp endSheet: sheet returnCode:23]之后,你可能还需要执行[sheet close]才能将sheet窗口关闭。

如何获取标题栏的高度

当你对一个窗口使用setFrame:时,你需要把标题栏的高度也算进去。从前标题条的高度是16点,在Aqua里,是22个点。由于这个高度不固定,所以你最好这样计算:

 
- (float) titleBarHeight
{
    NSRect frame = NSMakeRect (0, 0, 100, 100);
           
    NSRect contentRect;
    contentRect = [NSWindow contentRectForFrameRect: frame
                                                                                              styleMask: NSTitledWindowMask];
           
    return (frame.size.height - contentRect.size.height);
           
}

如何以sheet形式显示窗口

我们经常能够看到OS X中不少应用程序使用了Sheet形式的窗口,看起来是个对话框,但是弹出的效果是动画形式从上到下的。我们如何在自己的程序中使用这种Sheet窗口呢?

 

点击这里阅读全文 »

如何使用NSOpenPanel打开文件对话框

本文介绍通过调用NSOpenPanel打开文件选择对话框的方法 。

点击这里阅读全文 »

最新评论

最新讨论