NSString * текст в значок NSString *? - PullRequest
1 голос
/ 06 июня 2011

Я создаю приложение, которое представляет собой отдельный пункт меню, и основой для кода является пример кода, который я нашел на веб-сайте. Пример кода использует число в качестве значка меню, но я хочу изменить его на изображение.

Я хочу, чтобы он был похож на другие приложения, где он показывает icon.png, когда не нажата, и icon-active.png, когда нажата.

Текущий код:

- (void)drawRect:(NSRect)rect {
// Draw background if appropriate.
if (clicked) {
    [[NSColor selectedMenuItemColor] set];
    NSRectFill(rect);
}

// Draw some text, just to show how it's done.
NSString *text = @"3"; // whatever you want

NSColor *textColor = [NSColor controlTextColor];
if (clicked) {
    textColor = [NSColor selectedMenuItemTextColor];
}

NSFont *msgFont = [NSFont menuBarFontOfSize:15.0];
NSMutableParagraphStyle *paraStyle = [[NSMutableParagraphStyle alloc] init];
[paraStyle setParagraphStyle:[NSParagraphStyle defaultParagraphStyle]];
[paraStyle setAlignment:NSCenterTextAlignment];
[paraStyle setLineBreakMode:NSLineBreakByTruncatingTail];
NSMutableDictionary *msgAttrs = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                 msgFont, NSFontAttributeName,
                                 textColor, NSForegroundColorAttributeName,
                                 paraStyle, NSParagraphStyleAttributeName,
                                 nil];
[paraStyle release];

NSSize msgSize = [text sizeWithAttributes:msgAttrs];
NSRect msgRect = NSMakeRect(0, 0, msgSize.width, msgSize.height);
msgRect.origin.x = ([self frame].size.width - msgSize.width) / 2.0;
msgRect.origin.y = ([self frame].size.height - msgSize.height) / 2.0;

[text drawInRect:msgRect withAttributes:msgAttrs];
}

Кроме того, я нашел пост, описывающий метод, как это сделать, но он не работал для меня. URL к этому: http://mattgemmell.com/2008/03/04/using-maattachedwindow-with-an-nsstatusitem/comment-page-1#comment-46501.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 06 июня 2011

Если это для элемента состояния, и вам нужен значок без программного чертежа, отбросьте вид и установите для элементов состояния image и alternateImage.Первый - это то, что обычно использует элемент состояния;элемент состояния переключается на альтернативное изображение (если оно есть), когда пользователь открывает свое меню.

2 голосов
/ 06 июня 2011

Используйте NSImage и нарисуйте его где угодно. Например:

NSString *name = clicked? @"icon-active" : @"icon";
NSImage *image = [NSImage imageNamed:name];
NSPoint p = [self bounds].origin;
[image drawAtPoint:p fromRect:NSZeroRect
         operation:NSCompositeSourceOver fraction:1.0];
...