2014-07-25 11 views
16

Rozwiązaniem zrobić UIImage odbijania jest z kodem Objective-C:Jak odwrócić UIImage w poziomie za pomocą Swift?

[UIImage imageWithCGImage:img.CGImage scale:1.0 orientation: UIImageOrientationDownMirrored] 

Jednak imageWithCGImage nie jest dostępny w Swift! Czy istnieje rozwiązanie do rzutowania obrazu w poziomie za pomocą Swift? Dzięki!

Odpowiedz

23

Większość metod fabrycznych jest konwertowana na inicjalizatory w trybie szybkim. Kiedykolwiek są dostępne, nawet jeśli metoda klasowa jest nadal dostępna, są one preferowane. można użyć:

init(CGImage cgImage: CGImage!, scale: CGFloat, orientation: UIImageOrientation) 

Wykorzystanie będzie wyglądać następująco:

var image = UIImage(CGImage: img.CGImage, scale: 1.0, orientation: .DownMirrored) 
+11

Próbowałem tego i nie wydaje się odwracać obrazu. Czy istnieje sposób na zachowanie orientacji podczas renderowania? 'Rozszerzenie publicznej UIImage { \t var flippedHorizontally: UIImage { \t \t powrót UIImage (CGImage: self.CGImage !, skala: self.scale, orientacja: .UpMirrored) \t} }' – Gujamin

+0

niesamowite, dzięki! – RainCast

+0

Och ... Używałem opcji .LeftMirrored dla zdjęć selfie. Działa dobrze, aby wyświetlić zdjęcie po odwróceniu. Zdjęcie jest jednak odwrócone po zapisaniu w albumie fotograficznym. Jakieś pomysły? – RainCast

14

w Swift .... (6.3.1)

YourUIImage.transform = CGAffineTransformMakeScale(-1, 1) 

ta działa również z UIView

+27

Nie służy do przerzucania 'UIImage', ale do przerzucania' UIImageView'. –

7

Zmiana parametru orientacji obrazu w rzeczywistości nie powoduje odwrócenia obrazu we wszystkich przypadkach. Obraz musi być odświeżana jakoś ... Na przykład tak:

Swift 3

func flipImageLeftRight(_ image: UIImage) -> UIImage? { 

    UIGraphicsBeginImageContextWithOptions(image.size, false, image.scale) 
    let context = UIGraphicsGetCurrentContext()! 
    context.translateBy(x: image.size.width, y: image.size.height) 
    context.scaleBy(x: -image.scale, y: -image.scale) 

    context.draw(image.cgImage!, in: CGRect(origin:CGPoint.zero, size: image.size)) 

    let newImage = UIGraphicsGetImageFromCurrentImageContext() 

    UIGraphicsEndImageContext() 

    return newImage 
} 
0

Swift 4

YOURIMAGEVIEW.transform = CGAffineTransform(scaleX: -1, y: 1) 
+0

Pytanie dotyczy UIImage, a nie UIImageView –

1

Dla mnie najprostszym sposobem było wykorzystanie instancję .withHorizontallyFlippedOrientation() metoda UIImage w następujący sposób:

let flippedImage = straightImage.withHorizontallyFlippedOrientation()

Proste jednokanałówki zawsze mnie uszczęśliwiają :)

Powiązane problemy