Ну, проверяя исходный код для метода af_imageAspectScaled Я нашел следующий код для генерации фактического масштабированного изображения:
UIGraphicsBeginImageContextWithOptions(size, af_isOpaque, 0.0)
draw(in: CGRect(origin: origin, size: scaledSize))
let scaledImage = UIGraphicsGetImageFromCurrentImageContext() ?? self
UIGraphicsEndImageContext()
Параметр со значением 0.0 на UIGraphicsBeginImageContextWithOptions
сообщаетметод использования масштабного коэффициента основного экрана для определения размера изображения.
Я попытался установить это значение равным 1,0, и при запуске моего теста af_imageAspectScaled
сгенерировал изображение с нужными размерами, которые я хотел.
Здесь есть таблица, показывающая все разрешения устройств iOS.Мое приложение отправляло изображения соответствующего размера для всех устройств с масштабным коэффициентом 2,0, однако некоторые устройства имеют масштабный коэффициент 3,0.Для тех приложение не работало.
Ну, к сожалению, кажется, что если я хочу использовать af_imageAspectScaled
, мне нужно разделить окончательный размер, который я хочу, на масштаб устройства при настройке масштабированного размера следующим образом:
let scale = UIScreen.main.scale
let croppedImage = image.af_imageAspectScaled(
toFill: CGSize(
width: 320/scale,
height: 320/scale
)
)
Я отправил запрос на извлечение AlamofireImage с предложением добавить параметр scale
в функции af_imageAspectScaled(toFill:)
, af_imageAspectScaled(toFit:)
и af_imageScaled(to:)
.Если они это примут, приведенный выше код должен стать:
// this is not valid with Alamofire 4.0.0 yet! waiting for my pull request to
// be accepted
let croppedImage = image.af_imageAspectScaled(
toFill: CGSize(
width: 320,
height: 320
),
scale: 1.0
)
// croppedImage would be a 320px by 320px image, regardless of the device type.