45 lines
1.5 KiB
Swift
45 lines
1.5 KiB
Swift
import Foundation
|
|
import SwiftUI
|
|
import UIKit
|
|
|
|
class GoalShareService {
|
|
static let shared = GoalShareService()
|
|
|
|
private init() {}
|
|
|
|
@MainActor
|
|
func shareGoal(
|
|
name: String,
|
|
progress: Double,
|
|
currentValue: Decimal,
|
|
targetValue: Decimal
|
|
) {
|
|
guard let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene,
|
|
let viewController = windowScene.windows.first?.rootViewController else {
|
|
return
|
|
}
|
|
|
|
let card = GoalShareCardView(
|
|
name: name,
|
|
progress: progress,
|
|
currentValue: currentValue,
|
|
targetValue: targetValue
|
|
)
|
|
|
|
if #available(iOS 16.0, *) {
|
|
let renderer = ImageRenderer(content: card)
|
|
let scale = viewController.view.window?.windowScene?.screen.scale
|
|
?? viewController.traitCollection.displayScale
|
|
renderer.scale = scale
|
|
if let image = renderer.uiImage {
|
|
let activityVC = UIActivityViewController(activityItems: [image], applicationActivities: nil)
|
|
viewController.present(activityVC, animated: true)
|
|
}
|
|
} else {
|
|
let text = "I am \(Int(progress * 100))% towards \(name) on Portfolio Journal!"
|
|
let activityVC = UIActivityViewController(activityItems: [text], applicationActivities: nil)
|
|
viewController.present(activityVC, animated: true)
|
|
}
|
|
}
|
|
}
|