作者: Cocoa China
2008年
4月7日
苹果在最新发布的Macbook Air中,应用了最新的触摸板,这种触摸板实现了广为好评的iPhone中的多点触摸MultiTouch技术,你可以用两根或者三根手指在触摸板上做出叫做手势(Gestures)的动作,程序可以对你的动作进行诸如缩放、旋转、翻页等响应。而在未来,新的Macbook Pro也将带有这种全新的触摸板。

不过虽然触摸板硬件本身带有这种技术,不过目前也只有少量苹果随机自带的程序支持多点触摸功能。那么如何在你自己的应用程序中也加入这种全新体验的功能,就是本文讨论的课题。
点击这里阅读全文 »
作者: Cocoa China
2008年
3月25日

当你对一个窗口使用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);
}
作者: Cocoa China
2008年
3月25日

有时候你希望设置鼠标的样式,比如选择图片时,你希望鼠标指针是一个十字形。将以下代码加入NSView的子类中:
- (void) resetCursorRects
{
[super resetCursorRects];
[self addCursorRect: [self bounds]
cursor: [NSCursor crosshairCursor]];
}
作者: Cocoa China
2008年
3月25日
ESC键并没有预置的常量供使用。不过你可以使用键值27,因为几乎所有电脑的键盘esc用的都是这个键值。
- (void) keyDown: (NSEvent *) event
{
NSString *chars = [event characters];
unichar character = [chars characterAtIndex: 0];
if (character == 27) {
NSLog (@"ESCAPE!");
}
}
作者: Cocoa China
2008年
3月25日
实现方法是:在事件中搜索NSDeleteCharacter。
- (void) keyDown: (NSEvent *) event
{
NSString *chars = [event characters];
unichar character = [chars characterAtIndex: 0];
if (character == NSDeleteCharacter) {
NSLog (@"Delete!");
}
}
作者: Cocoa China
2008年
3月25日
像iPhone那种用手指拖拽形式的页面卷动在某些情况下很有用。如果是一个比较大的图形或者列表,显然这种滚动形式更容易看清楚。
您只要阅读本文就知道如何简单地实现了。
点击这里阅读全文 »
作者: Cocoa China
2008年
3月25日
实现方法:
在NSView子类中加入:
[self lockFocus];
NSBitmapImageRep *bits;
bits = [[NSBitmapImageRep alloc]
initWithFocusedViewRect: [self bounds]];
[self unlockFocus];
这样就可以将其保存在NSImage中,或者保存为文件等。
如果你希望将图形保存为矢量信息,你可以使用 [self dataWithPDFInsideRect: [self bounds]] 然后建立一个NSPDFImageRep。不要使用NSEPSImageRep因为PS格式转换速度比较缓慢。
作者: Cocoa China
2008年
3月25日
以下是实现代码,保存下来吧:)
- (void) keyDown: (NSEvent *) event
{
NSString *characters;
characters = [event characters];
unichar character;
character = [characters characterAtIndex: 0];
if (character == NSRightArrowFunctionKey) {
[self moveSelectedBlockBy: 1];
} else if (character == NSLeftArrowFunctionKey) {
[self moveSelectedBlockBy: -1];
} //也可以获取其他按键
}
作者: Cocoa China
2008年
3月25日
如果你看过Core Animation,一定希望自己制作动感十足的菜单,CocoaChina带给你如何实现这种菜单的方法。本文主要介绍如何通过点击选中某一个特定菜单项的方法,如果你希望对Core Animation涉及多一点,相信这篇文章会对你有用。
假定我们通过以下层次结构创建了一系列CALayer,这些CALayer实现了一个菜单结构:
rootLayer -> scrollLayer -> menuLayer -> n个菜单项Layer
那么我们希望通过鼠标点中对某一个菜单项进行选择,基本思路是这样的:
由于菜单项内可能有多个选项,而且可能有滚动的情况,因此需要通过-hitTest:方法获取点中的层。
请仔细阅读本文获取更多内容。
点击这里阅读全文 »
作者: Cocoa China
2008年
3月25日
以下是代码:
NSPoint point = [self convertPoint: [event locationInWindow] fromView: nil];
作者: Cocoa China
2008年
3月25日
在mouseDown:中
if ([event modifierFlags] & NSShiftKeyMask) {
constrain = YES;
}
如果不在mouseDown:中,需要调用carbon:
GetCurrentEventKeyModifiers返回控制键的状态
GetCurrentKeyModifiers返回硬件按键状态
热键常量需要转换一下才能在AppKit里使用。