В настоящее время я использую следующий Swift Code для масштабирования обрезки и изготовления кругового изображения из прошедшего UIImage. Все работает до iOS 18, но после этого я могу наблюдать за авариями. Я обнаружил, что начиная с iOS 18 следующие три метода устарели; < /p>
UIGraphics.BeginImageContextWithOptions(size, false, ScreenDensity);
var image = UIGraphics.GetImageFromCurrentImageContext();
UIGraphics.EndImageContext();
Из других сообщений рекомендуется использовать UgraphicsImagerenderer и связанные с ним функции. Вот полный код с использованием вышеупомянутых API. < /P>
func scaleCropAndCircleImage(image:UIImage, frame:CGRect) throws -> UIImage {
enum FunctionError: Error {
case nilContext
case nilImage
}
UIGraphicsBeginImageContextWithOptions(CGSizeMake(frame.size.width, frame.size.height), false, 0.0)
guard let context = UIGraphicsGetCurrentContext() else { throw FunctionError.nilContext }
// width and heights of passed values of uiimage and CGRect
let passedimageWidth = image.size.width
let passedimageHeight = image.size.height
let passedrectWidth = frame.size.width
let passedrectHeight = frame.size.height
// scale factor calculation
let scaleFactorX = passedrectWidth/passedimageWidth
let scaleFactorY = passedrectHeight/passedimageHeight
// centre of the circle calculation
let imageCentreX = passedrectWidth/2
let imageCentreY = passedrectHeight/2
// Creating and clipping to a CIRCULAR Path
let radius = passedrectWidth/2
context.beginPath()
context.addArc(center: CGPoint(x: imageCentreX, y: imageCentreY), radius: radius, startAngle: 0, endAngle: 2 * .pi, clockwise: false)
context.closePath()
context.clip()
//Seting the scaling factor for graphics context
context.scaleBy(x: scaleFactorX, y: scaleFactorY)
let myRect:CGRect = CGRectMake(0, 0, passedimageWidth, passedimageHeight)
image.draw(in: myRect)
let newCroppedImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
guard let newCroppedImage else { throw FunctionError.nilImage }
return newCroppedImage
}
Теперь я пытаюсь заменить устаревшие функции, используя UigraphicsImagerenderer , но я застрял в середине пути, как преобразовать уже используемую логику для UigraphicsImagerenderer функции. Ниже приведен код, который я пробовал до сих пор. Может ли кто -нибудь помочь мне в этом, чтобы приведенная ниже функция могла принять Uiimage и обрезать его в круг, как это сделано в существующем коде? < /P>
import UIKit
extension UIImage {
func roundedCornerImage(with radius: CGFloat) -> UIImage {
let format = UIGraphicsImageRendererFormat()
format.scale = scale
let renderer = UIGraphicsImageRenderer(size: size, format: format)
return renderer.image { rendererContext in
let rect = CGRect(origin: .zero, size: size)
let path = UIBezierPath(roundedRect: rect,
byRoundingCorners: .allCorners,
cornerRadii: CGSize(width: radius, height: radius))
path.close()
let cgContext = rendererContext.cgContext
cgContext.saveGState()
path.addClip()
draw(in: rect)
cgContext.restoreGState()
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/794 ... phicsimage
Как масштабировать обрезку и сократить Uiimage до круга в Swift, используя UigraphicsImagerenderer? ⇐ IOS
Программируем под IOS
1738826971
Anonymous
В настоящее время я использую следующий Swift Code для масштабирования обрезки и изготовления кругового изображения из прошедшего UIImage. Все работает до iOS 18, но после этого я могу наблюдать за авариями. Я обнаружил, что начиная с iOS 18 следующие три метода устарели; < /p>
UIGraphics.BeginImageContextWithOptions(size, false, ScreenDensity);
var image = UIGraphics.GetImageFromCurrentImageContext();
UIGraphics.EndImageContext();
Из других сообщений рекомендуется использовать UgraphicsImagerenderer и связанные с ним функции. Вот полный код с использованием вышеупомянутых API. < /P>
func scaleCropAndCircleImage(image:UIImage, frame:CGRect) throws -> UIImage {
enum FunctionError: Error {
case nilContext
case nilImage
}
UIGraphicsBeginImageContextWithOptions(CGSizeMake(frame.size.width, frame.size.height), false, 0.0)
guard let context = UIGraphicsGetCurrentContext() else { throw FunctionError.nilContext }
// width and heights of passed values of uiimage and CGRect
let passedimageWidth = image.size.width
let passedimageHeight = image.size.height
let passedrectWidth = frame.size.width
let passedrectHeight = frame.size.height
// scale factor calculation
let scaleFactorX = passedrectWidth/passedimageWidth
let scaleFactorY = passedrectHeight/passedimageHeight
// centre of the circle calculation
let imageCentreX = passedrectWidth/2
let imageCentreY = passedrectHeight/2
// Creating and clipping to a CIRCULAR Path
let radius = passedrectWidth/2
context.beginPath()
context.addArc(center: CGPoint(x: imageCentreX, y: imageCentreY), radius: radius, startAngle: 0, endAngle: 2 * .pi, clockwise: false)
context.closePath()
context.clip()
//Seting the scaling factor for graphics context
context.scaleBy(x: scaleFactorX, y: scaleFactorY)
let myRect:CGRect = CGRectMake(0, 0, passedimageWidth, passedimageHeight)
image.draw(in: myRect)
let newCroppedImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
guard let newCroppedImage else { throw FunctionError.nilImage }
return newCroppedImage
}
Теперь я пытаюсь заменить устаревшие функции, используя UigraphicsImagerenderer , но я застрял в середине пути, как преобразовать уже используемую логику для UigraphicsImagerenderer функции. Ниже приведен код, который я пробовал до сих пор. Может ли кто -нибудь помочь мне в этом, чтобы приведенная ниже функция могла принять Uiimage и обрезать его в круг, как это сделано в существующем коде? < /P>
import UIKit
extension UIImage {
func roundedCornerImage(with radius: CGFloat) -> UIImage {
let format = UIGraphicsImageRendererFormat()
format.scale = scale
let renderer = UIGraphicsImageRenderer(size: size, format: format)
return renderer.image { rendererContext in
let rect = CGRect(origin: .zero, size: size)
let path = UIBezierPath(roundedRect: rect,
byRoundingCorners: .allCorners,
cornerRadii: CGSize(width: radius, height: radius))
path.close()
let cgContext = rendererContext.cgContext
cgContext.saveGState()
path.addClip()
draw(in: rect)
cgContext.restoreGState()
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79413589/how-to-scale-crop-and-cut-the-uiimage-to-a-circle-in-swift-using-uigraphicsimage[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия