はじめに
@GestureState
という機能があり、使ったことがなかったので使ってみました
サンプルアプリ
実装
こちらの公式ドキュメントのコードを使用しています
import SwiftUI
struct ContentView: View {
@GestureState private var isDetectingLongPress = false
var longPress: some Gesture {
LongPressGesture(minimumDuration: 3)
.updating($isDetectingLongPress) { currentState, gestureState, transaction in
gestureState = currentState
}
}
var body: some View {
Circle()
.fill(self.isDetectingLongPress ? Color.red : Color.green)
.frame(width: 100, height: 100, alignment: .center)
.gesture(longPress)
}
}
@GestureState
のメリット
ジェスチャーが終了すると自動でfalse
になるので、
押している間だけ処理をするということに適しています。
- 長押ししてる間だけ録音
- 長押ししてる間だけ動画を撮影
色々と使えそうな機能ですね
おわり
この機能は使われているのもみたことがなかったので存在を全く知りませんでした
参考記事