NSImage Overlay/Mask Gradient как iOS

Я хочу воспроизвести с помощью Cocoa/Core Graphics процесс, который, кажется, происходит в iOS при установке изображения для UITabBarItem. Когда выбран элемент панели вкладок, на изображение накладывается градиент.

Например,

введите здесь описание изображения

становится...

введите здесь описание изображения

Я не уверен, что именно я должен делать для достижения этого эффекта. Кажется, что изображение маскирует градиент. Любые указатели в правильном направлении (или код!) будут высоко оценены.


person JoeR    schedule 27.01.2011    source источник


Ответы (1)


Вы можете использовать монохромный CGImage с альфа-каналом (как и большинство значков инструментов/вкладок iPhone) в качестве маски. По сути, вы бы использовали CGContextClipToMask с монохромным изображением. Затем вы рисуете градиент, который затем обрезается до изображения маски. Вы также можете взглянуть на код UMEKit, который реализует этот эффект на Mac OS X (убежище не смотрел как именно они это делают, наверное есть несколько способов).

person omz    schedule 27.01.2011
comment
Вы знаете, что на самом деле я использовал UMEKit в другом проекте и даже не подумал посмотреть. Спасибо за предложение! - person JoeR; 27.01.2011
comment
В итоге сделал то, что, кажется, делает UMEKit. Сначала я рисую градиент в своем методе drawRect, а затем накладываю на него NSImage вот так — [topWave drawAtPoint:NSMakePoint(0, 0) fromRect:NSMakeRect(0, 0, self.frame.size.width, self.frame.size.height) operation:NSCompositeDestinationAtop fraction:1.0]; - person JoeR; 28.01.2011