【SwiftUI】吹き出しを作りたい

Instagram のこれ。

作ってみようと。

 

🧑🏻‍💻 popover で作る

使えそうなのでやってみました。

👉 popover(isPresented:attachmentAnchor:arrowEdge:content:) | Apple Developer Documentation



struct AnimatedSpeechBubble: View {
  @State private var show = false

  var body: some View {

    HStack {
      Text("お知らせ")
        .popover(isPresented: $show, arrowEdge: .trailing) {
          Text("横に出せないの?")
            .padding(.horizontal)
            .foregroundStyle(.background)
            .presentationBackground(.red)
            .presentationCompactAdaptation(.popover)
        }
      Spacer()
    }
    .frame(width: 250, height: 50)

    Button(show ? "hide" : "show") {
      show.toggle()
    }
    .buttonStyle(.borderedProminent)

  }
}

#Preview("animated") {
  AnimatedSpeechBubble()
    .padding()
    .frame(maxWidth: .infinity)
}

なぜか横 ( .trailing ) 方向に出すことができません。

GIFにしてみたら背景色もなんかあやしい。

あと、ボタンの色も勝手に変わる。

 

🧑🏻‍💻 手作りで

基本の組み合わせで作ります。

まず、吹き出しを作ります。

Path() は使いません。


struct SpeechBubble: View {
  var count: Int

  var body: some View {
    HStack(spacing: 0) {
      Rectangle()
        .fill(.red)
        .rotationEffect(.degrees(45))
        .frame(width: 20, height: 20)
        .offset(x: 14)
        .clipShape(.rect) // *
      HStack {
        Image(systemName: "heart.fill")
        Text("\(count)")
      }
      .foregroundStyle(.background)
      .padding()
      .background(.red, in: .rect(cornerRadius: 8))
    }
  }
}

#Preview("bubble") {
  SpeechBubble(count: 999)
}

アニメーションな部分は scaleopacity のトランジションを使います。


if show {
  SpeechBubble(count: 999)
    .transition(.scale(scale: 0.25).combined(with: .opacity))
}

いい感じです。

 

🧑🏻‍💻 まとめ

手作りでまあいけそうです。

以上のソースコード一式です。


【SwiftUI】State 付きボタンのアニメーション記述

公式チュートリアルを見ながら。


Animating views and transitions — SwiftUI Tutorials | Apple Developer Documentation

思いついたものを書きなぐり試す。



 

🤔 まとめ

- animation(), withAnimation() 記述がなくても effect にはデフォルトでアニメーションがつく。
- animation() で 個別に effect のアニメーションを変更や削除ができる。
- withAnimation() でアニメーションの変更や削除ができる。



DJI OSMO ACTION シリーズの HDR って BT.709 なの?

まずは、HDR の規格を確認。


👉 よくわかる、HDR徹底解説! ガンマカーブの違い | EIZO株式会社 hatena-bookmark

10bit なんだけども、どうやっても BT.709 しか撮れない!

以下、HDR モードで撮影した動画の mediainfo


Video
ID                                       : 1
Format                                   : HEVC
Format/Info                              : High Efficiency Video Coding
Format profile                           : Main 10@L5@High
Codec ID                                 : hvc1
Codec ID/Info                            : High Efficiency Video Coding
Duration                                 : 25 s 192 ms
Bit rate                                 : 55.0 Mb/s
Width                                    : 3 840 pixels
Height                                   : 2 160 pixels
Display aspect ratio                     : 16:9
Frame rate mode                          : Constant
Frame rate                               : 29.970 (30000/1001) FPS
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 10 bits
Bits/(Pixel*Frame)                       : 0.221
Stream size                              : 165 MiB (95%)
Encoded date                             : 2024-08-23 08:24:56 UTC
Tagged date                              : 2024-08-23 08:24:56 UTC
Color range                              : Limited
Color primaries                          : BT.709
Transfer characteristics                 : BT.709
Matrix coefficients                      : BT.709
Codec configuration box                  : hvcC

まさか「HDR」というより「HDR モード」(のようなもの) では。。。。

You do not have HDR....is a pure commercial gimmick from producers, saying that they use a double exposure to gain more data...is not.
In fact, even that BT709 is cut, as is not Full but Limited RGB.
The 10bit is only for color, is not HLG or LOG true, but also a mambo-jumbo, as DR is not bigger but contrast is lowered, compressing the shadows and highlights (upper shadows, lower highs).
So...OA4 is not HDR, is not LOG, is not HLG. Is just BT709 with a possibility to get 10bit color profile and that is it.

Still, the good part (always is one, not only negative parts) is that this "LOG" (more like Neutral) profile will allow you to post edit better for scenes that have big contrast, like night footage with a lot of lights.

At this point you do not have a true HDR or LOG action camera on the market, GoPro is worst in dark and Insta ACE being 8bit.

Cheers.

HDR がないのは、プロデューサーが二重露光を使ってより多くのデータを得ると言っているだけの、純粋な商業的な仕掛けです...
実際は違います。BT709 もカットされており、Full ではなく Limited RGB です。10
ビットはカラー専用で、HLG や LOG ではありませんが、DR は大きくならずコントラストが下がり、シャドウとハイライト (上部シャドウ、下部高) が圧縮されるため、非常に複雑です。
つまり、OA4 は HDR でも LOG でも HLG でもありません。10 ビット カラー プロファイルを取得できる可能性のある BT709 であり、それだけです。

それでも、良い点 (常に 1 つあり、悪い点だけではありません) は、この "LOG" (ニュートラルに近い) プロファイルを使用すると、多くのライトがある夜の映像など、コントラストの大きいシーンを後から編集できる点です。

現時点では、市場には真の HDR または LOG アクション カメラはありません。GoPro は暗闇では最悪で、Insta ACE は 8 ビットです。

乾杯。

👉 10bit recording but not recorded in HDR? | DJI FORUM hatena-bookmark

Thank you for your feedback. The Osmo Action 3 does not use common standards such as HLG and HDR10, so some mobile devices and computer software do not recognize footage shot by the product as HDR footage. The product adopts HDR technology for camera sensors which supports shooting with a high dynamic range and 10-bit color depth, and can effectively restore highlight and shadow details. We appreciate your understanding.

ご意見ありがとうございます。Osmo Action 3はHLGやHDR10などの一般的な規格を使用していないため、一部のモバイルデバイスやコンピューターソフトウェアでは、製品で撮影した映像がHDR映像として認識されません。この製品は、カメラセンサーにHDRテクノロジーを採用しており、ハイダイナミックレンジと10ビットの色深度での撮影をサポートし、ハイライトとシャドウのディテールを効果的に復元できます。ご理解のほどよろしくお願いいたします。

It’s their own version of a high dynamic range. Not true HDR where you switch the monitor/tv (mine works in HLG and HDR10) to full brightness and contrast in order to take advantage of the extra range. The Action footage looks as though it flattens dynamic footage but that’s not HDR!

これは、ハイダイナミックレンジの独自のバージョンです。モニター/テレビ (私のモニター/テレビは HLG と HDR10 で動作します) を最大輝度とコントラストに設定して、追加のレンジを利用するという、真の HDR ではありません。アクション映像は、ダイナミックな映像を平坦化しているように見えますが、それは HDR ではありません。

👉 Osmo Action 3 HDR problem | DJI FORUM hatena-bookmark

👉 ffprobe vs mediainfo hatena-bookmark