Мне удалось создать обходной путь для этого. Я могу проверить ожидаемый размер моего изображения в layoutSubviews
, и если он не соответствует размеру UIImage
, я могу использовать UIGraphicsImageRenderer
, чтобы создать новое изображение, масштабированное до правильного размера. Я создал расширение UIImage
для облегчения этого:
extension UIImage {
internal func imageScaled(toSize scaledSize: CGSize) -> UIImage {
let renderer = UIGraphicsImageRenderer(size: scaledSize)
let newImage = renderer.image { [unowned self] _ in
self.draw(in: CGRect(origin: .zero, size: scaledSize))
}
return newImage
}
}
Теперь мой обновленный метод layoutSubviews
выглядит следующим образом:
public override func layoutSubviews() {
super.layoutSubviews()
// Layout circle
let path = UIBezierPath(ovalIn: bounds.insetBy(dx: lineWidth.mid, dy: lineWidth.mid))
circleLayer.path = path.cgPath
// Layout check
if let checkImage = checkImage, checkImage.size != checkImageSize {
checkLayer.contents = checkImage.imageScaled(toSize: checkImageSize).cgImage
}
let checkOrigin = CGPoint(x: bounds.midX - checkImageSize.midW, y: bounds.midY - checkImageSize.midH)
checkLayer.frame = CGRect(origin: checkOrigin, size: checkImageSize)
}
Это приводит к хорошему четкому изображению:
Вы ответили на свой вопрос, вы можете запустить команду и, если она получит отрицательный ответ, вы знаете, что она не установлена, или вы можете проверить пути по умолчанию, заданные пользователем для возможных двоичных файлов ffmpeg.
You could give this a try:
function commandExists($command) {
$command = escapeshellarg($command);
$exists = exec("man ".$command,$out);
return sizeof($out);
}
if (commandExists("ffmpeg")>0) {
// FFMPeg Exists on server
} else {
// No FFMPeg
}
Reusable for other functions as well - not certain of security concerns.
Третий параметр функции exec ()
- это возвращаемое значение выполненной программы. Используйте его так:
exec($cmd, $output, $returnvalue);
if ($returnvalue == 127) {
# not available
}
else {
#available
}
Это работает на моем компьютере с Ubuntu.