mirror of
https://github.com/cranci1/Sora.git
synced 2026-04-25 10:23:11 +00:00
72 lines
2.3 KiB
Swift
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)
|
|
}
|
|
}
|