【Swift UI/UIKit】UIImage(画像)を反転させる方法!

この記事からわかること

  • Swift/UIKit画像左右/上下反転させる方法
  • UIImageImage構造体の使い方
  • UIImage.Orientation型の種類
  • UIImage(cgImage: CGImage, scale: CGFloat, orientation: UIImage.Orientation)upMirroredを指定する

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境

Swiftで画像自体を反転させて表示する方法:UIImage

Swiftで画像自体を左右に反転させたい場合は一度CGImage型を取得してUIImage(cgImage: CGImage, scale: CGFloat, orientation: UIImage.Orientation)イニシャライザで引数orientationupMirroredを指定するだけです。

let image = UIImage(systemName: "swift")

if let cgImage = image?.cgImage, let scale = image?.scale {
    // 画像を反転させてUIImageを構築
    let flipImage = UIImage(cgImage: cgImage, scale: scale, orientation: .upMirrored)
}

反転自体は問題なく実装できましたが、そのままUIImageViewで表示してみると画質が悪くなってしまったので、反転させた画像自体を用意するのが一番無難かもしれません。

【Swift UI/UIKit】UIImage(画像)を反転させる方法!

UIImage.Orientation型の種類

公式リファレンス:UIImage.Orientation型

enum Orientation : Int, @unchecked Sendable {
  case up
  // 180 度回転(上下逆)
  case down
  // 反時計回りに 90 度回転
  case left
  // 時計回りに 90 度回転
  case right
  // 水平方向に反転
  case upMirrored
  // 垂直方向に反転
  case downMirrored
  // 時計回りに 90 度回転され、水平方向に反転
  case leftMirrored
  // 反時計回りに 90 度回転され、水平方向に反転
  case rightMirrored
}

Swift UIの場合

Swift UIの場合はImage構造体自体が画像単体を保持するオブジェクトではなく、ビューを保持するオブジェクトなのでrotation3DEffectを使用してビューごと反転させることで解決できます。

HStack {
    Image(systemName: "swift")
        .resizable()
        .scaledToFit()
        .frame(width: 200)
    
    Image(systemName: "swift")
        .resizable()
        .scaledToFit()
        .frame(width: 200)
        .rotation3DEffect(.degrees(180), axis: (x: 0, y: 1, z: 0))
        // 上下反転
        //.rotation3DEffect(.degrees(180), axis: (x: 1, y: 0, z: 0))
        // 左右/上下反転
        //.rotation3DEffect(.degrees(180), axis: (x: 0, y: 0, z: 1))
}
【Swift UI/UIKit】UIImage(画像)を反転させる方法!

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index