2016-08-22 3 views

Antwort

3

können Sie Setup UIGraphicsImageRenderer ein Bild zu erzeugen und damit die UIGraphicsGetCurrentContext() aufrufen und den Kontext drehen

let renderer = UIGraphicsImageRenderer(size:sizeOfImage) 
    let image = renderer.image(actions: { _ in 
     let context = UIGraphicsGetCurrentContext() 

     context?.translateBy(x: orgin.x, y: orgin.y) 
     context?.rotate(by: angle) 
     context?.draw(image.cgImage!, in: CGRect(origin: CGPoint(x: -orgin.x,y: -orgin.y), size: size)) 
    } 
return image 
1

Durch die Dokumentation gehen und auch aufgrund der fehlenden Antworten auf diese Frage gehe ich davon aus, dass es mit der neuen UIGraphicsImageRenderer nicht möglich ist. Hier ist, wie ich es am Ende des Tages gelöst:

func changeImageRotation(forImage image:UIImage, rotation alpha:CGFloat) -> UIImage{ 

    var newSize:CGSize{ 
     let a = image.size.width 
     let b = image.size.height 

     let width = abs(cos(alpha)) * a + abs(sin(alpha)) * b 
     let height = abs(cos(alpha)) * b + abs(sin(alpha)) * a 

     return CGSize(width: width, height: height) 
    } 

    let size = newSize 
    let orgin = CGPoint(x: size.width/2, y: size.height/2) 

    UIGraphicsBeginImageContext(size) 
    let context = UIGraphicsGetCurrentContext() 

    context?.translateBy(x: orgin.x, y: orgin.y) 
    context?.rotate(by: alpha) 
    context?.draw(image.cgImage!, in: CGRect(origin: CGPoint(x: -orgin.x,y: -orgin.y), size: size)) 

    let newImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return newImage! 
} 

New Size zu dem rechteckigen Bereich entspricht, der das gedrehte Bild zu zeichnen, ohne Änderung seiner Gesamtgröße erforderlich ist. Das Bild wird dann in der Mitte gedreht und gezeichnet. Weitere Informationen hierzu finden Sie unter post.