2019-09-16 00:14:27 +02:00
|
|
|
//
|
|
|
|
// VibrantSelectAction.swift
|
|
|
|
// NetNewsWire-iOS
|
|
|
|
//
|
|
|
|
// Created by Maurice Parker on 9/15/19.
|
|
|
|
// Copyright © 2019 Ranchero Software. All rights reserved.
|
|
|
|
//
|
|
|
|
|
|
|
|
import SwiftUI
|
|
|
|
|
|
|
|
struct VibrantSelectAction: ViewModifier {
|
|
|
|
|
|
|
|
let action: () -> Void
|
|
|
|
@State var isTapped = false
|
|
|
|
@GestureState var isLongPressed = false
|
|
|
|
|
|
|
|
func body(content: Content) -> some View {
|
2019-09-16 03:47:01 +02:00
|
|
|
GeometryReader { geometry in
|
|
|
|
content
|
|
|
|
.frame(width: geometry.size.width, height: geometry.size.height, alignment: .leading)
|
|
|
|
.background(self.isLongPressed || self.isTapped ? Color(AppAssets.tableViewCellSelectionColor) : Color(.secondarySystemGroupedBackground))
|
|
|
|
}
|
|
|
|
.foregroundColor(isLongPressed || isTapped ? Color(AppAssets.tableViewCellHighlightedTextColor) : .primary)
|
|
|
|
.listRowBackground(isLongPressed || isTapped ? Color(AppAssets.tableViewCellSelectionColor) : nil)
|
|
|
|
.gesture(
|
|
|
|
LongPressGesture().onEnded( { _ in self.action() })
|
|
|
|
.updating($isLongPressed) { value, state, transcation in state = value }
|
|
|
|
.simultaneously(with:
|
|
|
|
TapGesture().onEnded( {
|
|
|
|
self.isTapped = true
|
|
|
|
self.action()
|
|
|
|
DispatchQueue.main.asyncAfter(deadline: .now() + 0.05) {
|
|
|
|
self.isTapped = false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
))
|
2019-09-16 00:14:27 +02:00
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|