Я нашел некоторый существующий код в другом приложении, но позже я также нашел этот метод GLib.AppInfo.launch_default_for_uri
.
Простой пример:
var file = File.new_for_path (file_path);
if (file.query_exists ()) {
try {
AppInfo.launch_default_for_uri (file.get_uri (), null);
} catch (Error e) {
warning ("Unable to launch %s", file_path);
}
}
Вы захотите закрепить контекст на маске изображения и затем заполнить сплошным цветом:
- (void)drawRect:(CGRect)rect
{
CGRect bounds = [self bounds];
[[UIColor blackColor] set];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextClipToMask(context, bounds, [myImage CGImage]);
CGContextFillRect(context, bounds);
}
Примечание: myImage
должна быть переменной экземпляра, содержащей UIImage
. Я не уверен, берет ли маска альфа-канал или интенсивность, поэтому попробуйте оба варианта.
-set
используется для установки цвета последующих операций рисования, которые не включают блиты. Я предлагаю в качестве первого вызова отобразить другой (пустой) UIView
поверх вашего UIImageView
и установить цвет его фона:
myView.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.5];
Очевидно, вы должны использовать желаемые значения белого и альфа-канала.
В дополнение к решению от rpetrich (которое, кстати, великолепно - помогите мне великолепно), вы также можете заменить строку CGContextClipToMask на:
CGContextSetBlendMode(context, kCGBlendModeSourceIn); //this is the main bit!
Это режим наложения SourceIn, который выполняет свою работу маскировки цвета тем, что находится в GetCurrentContext.