2010-05-19 5 views
1

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

- (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 отображает с низкой непрозрачностью, но не мой значок.

ответ

3

Проблема в том, что вы рисуете свою иконку поверх себя. Скорее всего, вы хотите:

- (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; 
} 
+0

Это имеет смысл. Спасибо вам. – ndg

+4

Кроме того, ['composToPoint: fromRect: operation: fraction:' устарел] (http://developer.apple.com/mac/library/documentation/Cocoa/Reference/ApplicationKit/Classes/NSImage_Class/DeprecationAppendix/AppendixADeprecatedAPI.html# // apple_ref/ОКК/instm/NSImage/compositeToPoint: fromRect: операции: фракция :). Используйте 'drawAtPoint: fromRect: operation: fraction:' вместо этого. –

+0

Хороший улов; Я это скрыл. – Wevah

Смежные вопросы