2016-09-29 6 views
1

Ich habe eine UIImage Erweiterung, die CGContextDrawImage verwendet. Es einfach eine UIImage drehen. Ich habe auf Xcode8 und Swift3 aktualisiert und kann nicht herausfinden, wie man CGContextDrawImage verwendet.Wie verwende CGContextDrawImage in Swift 3?

Ich habe Fehler auf CGContextDrawImage.

„Can not Werte vom Typ umwandeln "CGImage.Type zu erwarteten Argumenttyp"

Mein Code ist 'CGImage?':

CGContextDrawImage(bitmap, CGRectMake(-size.width/2, -size.height/2, size.width, size.height), CGImage) 

Und ganz Erweiterung:

extension UIImage { 
public func imageRotatedByDegrees(degrees: CGFloat, flip: Bool) -> UIImage { 
    let radiansToDegrees: (CGFloat) -> CGFloat = { 
     return $0 * (180.0/CGFloat(M_PI)) 
    } 
    let degreesToRadians: (CGFloat) -> CGFloat = { 
     return $0/180.0 * CGFloat(M_PI) 
    } 

    // calculate the size of the rotated view's containing box for our drawing space 
    let rectZero = CGPoint(dictionaryRepresentation: CGRect.zero as! CFDictionary) 
    let rotatedViewBox = UIView(frame: CGRect(origin: rectZero!, size: size)) 
    let t = CGAffineTransform(rotationAngle: degreesToRadians(degrees)); 
    rotatedViewBox.transform = t 
    let rotatedSize = rotatedViewBox.frame.size 

    // Create the bitmap context 
    UIGraphicsBeginImageContext(rotatedSize) 
    let bitmap = UIGraphicsGetCurrentContext() 

    // Move the origin to the middle of the image so we will rotate and scale around the center. 
    bitmap!.translateBy(x: rotatedSize.width/2.0, y: rotatedSize.height/2.0); 

    // // Rotate the image context 
    bitmap!.rotate(by: degreesToRadians(degrees)); 

    // Now, draw the rotated/scaled image into the context 
    var yFlip: CGFloat 

    if(flip){ 
     yFlip = CGFloat(-1.0) 
    } else { 
     yFlip = CGFloat(1.0) 
    } 

    bitmap!.scaleBy(x: yFlip, y: -1.0) 

    CGContextDrawImage(bitmap, CGRectMake(-size.width/2, -size.height/2, size.width, size.height), CGImage) 

    let newImage = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 

    return newImage! 
} 
} 
+0

Leider mit "cgcontextdrawimage swift3" Suche mich auf den Thread nicht führen ... Danke, dass du es gefunden hast! – OOPer

Antwort

5

In Swift 3 werden viele Funktionen für CGContext als Instanzmethode vonimportiertwurde der Name der Eigenschaft CGImage in cgImage umbenannt. Und CGRectMake wird entfernt.

Try this:

bitmap!.draw(cgImage!, in: CGRect(x: -size.width/2, y: -size.height/2, width: size.width, height: size.height)) 

(Hoffnung ! für Ihre Nutzung sicher sein würde.)

func draw(CGImage, in: CGRect, byTiling: Bool)