Wie skalieren Sie die Ernte und schneiden Sie die Benutzeroberfläche mit UigraphicsImagerePererer in Swift in einen KreiIOS

Programmierung für iOS
Anonymous
 Wie skalieren Sie die Ernte und schneiden Sie die Benutzeroberfläche mit UigraphicsImagerePererer in Swift in einen Krei

Post by Anonymous »

Derzeit verwende ich den folgenden Swift -Code zum Skalieren von Zuschneiden und zum Erstellen eines kreisförmigen Bildes aus der übergebenen Benutzeroberfläche. Alles funktioniert bis zu iOS 18, aber danach kann ich Abstürze beobachten. Ich fand, dass ab iOS 18 die folgenden drei Methoden veraltet wurden; < /p>

Code: Select all

UIGraphics.BeginImageContextWithOptions(size, false, ScreenDensity);
var image = UIGraphics.GetImageFromCurrentImageContext();
UIGraphics.EndImageContext();
Aus anderen Posts wird empfohlen, die Verwendung von uigraphicsImagereNeenderer und der zugehörigen Funktionen zu verwenden. Hier ist der vollständige Code mit den oben veralteten APIs. < /P>

Code: Select all

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
}
Jetzt versuche ich, die veralteten Funktionen zu ersetzen, indem ich den uigraphicsImagerePererer verwende, aber ich stecke in der mittleren Weise fest, wie man die bereits verwendete Logik für das uigraphicSimagererer konvertiert. Funktionen. Unten ist der Code, den ich bisher ausprobiert habe. Kann mir jemand dabei helfen, damit die folgende Funktion die UIImage akzeptieren und in einen Kreis wie in vorhandenem Code gemacht?

Code: Select all

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()
}
}
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post