Прозрачность NSImage - PullRequest
       19

Прозрачность NSImage

1 голос
/ 19 мая 2010

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

- (NSImage *)dragImageForRowsWithIndexes:(NSIndexSet *)dragRows tableColumns:(NSArray *)tableColumns event:(NSEvent *)dragEvent offset:(NSPointPointer)dragImageOffset
{
 NSImage *dragImage = [NSImage imageNamed:@"icon.png"];
 NSString *count = [NSString stringWithFormat:@"%d", [dragRows count]];

 [dragImage lockFocus]; 
 [dragImage compositeToPoint:NSZeroPoint fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:0.5];
 [count drawAtPoint:NSZeroPoint withAttributes:nil];

 [dragImage unlockFocus];
 return dragImage;
}

По сути, я хочу сделать мой файл icon.png с непрозрачностью 50% вместе с NSString, которая показывает количество строк, которые в данный момент перетаскиваются. Проблема, которую я вижу, заключается в том, что моя строка NSString отображается с низкой непрозрачностью, но не с моей иконкой.

1 Ответ

3 голосов
/ 19 мая 2010

Проблема в том, что вы рисуете свой значок поверх себя. То, что вы, вероятно, хотите, что-то вроде этого:

- (NSImage *)dragImageForRowsWithIndexes:(NSIndexSet *)dragRows tableColumns:(NSArray *)tableColumns event:(NSEvent *)dragEvent offset:(NSPointPointer)dragImageOffset
{
 NSImage *icon = [NSImage imageNamed:@"icon.png"];
 NSString *count = [NSString stringWithFormat:@"%lu", [dragRows count]];

 NSImage *dragImage = [[[NSImage alloc] initWithSize:[icon size]] autorelease];

 [dragImage lockFocus]; 
 [icon drawAtPoint:NSZeroPoint fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:0.5];
 [count drawAtPoint:NSZeroPoint withAttributes:nil];

 [dragImage unlockFocus];
 return dragImage;
}
...