Я создал небольшой проект для запроса устройства iOS и (1) перечислил все доступные фильтры и (2) перечислил все о каждом входном атрибуте.Этот проект можно найти здесь .
Соответствующий код:
var ciFilterList = CIFilter.filterNames(inCategories: nil)
Эта строка создает [String]
всех доступных фильтров.Если вам нужны только все доступные фильтры категории "CICategoryBlur", замените nil
на него.
print("=======")
print("List of available filters")
print("-------")
for ciFilterName in ciFilterList {
print(ciFilterName)
}
print("-------")
print("Total: " + String(ciFilterList.count))
Довольно очевидно.Когда я запускал это на iPad mini под управлением iOS 12.0.1, в списке было 207 фильтров.ПРИМЕЧАНИЕ: я никогда не пробовал это на macOS, но так как он действительно не использует UIKit
, я считаю, что это будет работать.
let filterName = "CIZoomBlur"
let filter = CIFilter(name: filterName)
print("=======")
print("Filter Name: " + filterName)
let inputKeys = filter?.inputKeys
if inputKeys?.count == 0 {
print("-------")
print("No input attributes.")
} else {
for inputKey in inputKeys! {
print("-------")
print("Input Key: " + inputKey)
if let attribute = filter?.attributes[inputKey] as? [String: AnyObject],
let attributeClass = attribute[kCIAttributeClass] as? String,
let attributeDisplayName = attribute["CIAttributeDisplayName"] as? String,
let attributeDescription = attribute[kCIAttributeDescription] as? String {
print("Display name: " + attributeDisplayName)
print("Description: " + attributeDescription)
print("Attrbute type: " + attributeClass)
switch attributeClass {
case "NSNumber":
let minimumValue = (attribute[kCIAttributeSliderMin] as! NSNumber).floatValue
let maximumValue = (attribute[kCIAttributeSliderMax] as! NSNumber).floatValue
let defaultValue = (attribute[kCIAttributeDefault] as! NSNumber).floatValue
print("Default value: " + String(defaultValue))
print("Minimum value: " + String(minimumValue))
print("Maximum value: " + String(maximumValue))
case "CIColor":
let defaultValue = attribute[kCIAttributeDefault] as! CIColor
print(defaultValue)
case "CIVector":
let defaultValue = attribute[kCIAttributeDefault] as! CIVector
print(defaultValue)
default:
// if you wish, just dump the variable attribute to look at everything!
print("No code to parse an attribute of type: " + attributeClass)
break
}
}
}
}
}
print("=======")
Опять же, довольно очевидно.Приложение, которое я пишу, работает только с фильтрами, использующими один CIImage
и с атрибутами, ограниченными NSNumber
, CIColor
и CIVector
, поэтому вещи будут падать на часть по умолчаниюswitch
заявление.Тем не менее, это должно помочь вам начать!Если вы хотите увидеть «сырую» версию, просто посмотрите на переменную attribute
.
Наконец, я бы порекомендовал нечто, разработанное Саймоном Гладманом, под названием Filterpedia.Это приложение для iPad (только в альбомной ориентации), которое позволяет вам экспериментировать со практически всеми доступными фильтрами, а также со всеми атрибутами со значениями по умолчанию / max / min.Будьте в курсе двух вещей, хотя.(1) Это написано в Swift 2, но здесь есть вилка Swift 4 здесь .(2) Существует также множество пользовательских фильтров, использующих пользовательские CIKernels
.