Sora/SulfurTV/Views/SettingsView/SettingsSubViews/InfoView.swift
2025-04-27 12:38:40 +02:00

72 lines
2.3 KiB
Swift

//
// InfoView.swift
// Sulfur
//
// Created by Dominic on 22.04.25.
//
import SwiftUI
import CoreImage
struct InfoView: View {
@Environment(\.dismiss) private var dismiss
let title: String
let urlString: String
var body: some View {
NavigationView {
HStack(spacing: 80) {
if let qrImage = generateQRCode(from: urlString) {
Image(uiImage: qrImage)
.interpolation(.none)
.resizable()
.frame(width: 300, height: 300)
.padding()
.background(.primary)
.cornerRadius(30)
}
// Text + Close Button
VStack(alignment: .leading, spacing: 40) {
Text("Scan to Visit")
.font(.largeTitle)
.bold()
.foregroundColor(.primary)
Text("Links cannot be openend on tvOS. But you can either Scan the QR-Code or type in the following URL into the Browser of your choosing: \n\n\(urlString)")
.font(.subheadline)
.foregroundColor(.secondary)
.frame(maxWidth: 500)
Button("Close") {
dismiss()
}
.buttonStyle(.borderedProminent)
.tint(.accentColor)
.foregroundColor(.primary)
}
}
.navigationTitle(title)
}
}
func generateQRCode(from string: String) -> UIImage? {
let data = Data(string.utf8)
guard let filter = CIFilter(name: "CIQRCodeGenerator") else { return nil }
filter.setValue(data, forKey: "inputMessage")
filter.setValue("Q", forKey: "inputCorrectionLevel")
guard let ciImage = filter.outputImage else { return nil }
// Scale the image up
let transform = CGAffineTransform(scaleX: 10, y: 10)
let scaledCIImage = ciImage.transformed(by: transform)
// Render CIImage into CGImage
let context = CIContext()
guard let cgImage = context.createCGImage(scaledCIImage, from: scaledCIImage.extent) else { return nil }
return UIImage(cgImage: cgImage)
}
}