I
Size: a a a
I
VV
VZ
🅰Б
highlighted и зачем оно нужно?
NB
highlighted и зачем оно нужно?
M
//
// ContentView.swift
// QR Code Generator
//
// Created by Mustafo on 04/04/21.
//
import SwiftUI
struct ContentView: View {
@State
private
var urlInput:String = ""
@State
private
var qrCode : QRCode?
private
let qrCodeGenerator = QRCodeGenerator()
@StateObject
private
var imageSaver = ImageSaver()
var body:
some View {
NavigationView{
GeometryReader{ geometry
in
LinearGradient(gradient: Gradient(colors: [.white,.red]), startPoint: .top, endPoint: .bottom).edgesIgnoringSafeArea(.all)
VStack{
HStack{
TextField("Enter QR Code",text:$urlInput)
.textFieldStyle(RoundedBorderTextFieldStyle())
.textContentType(.URL)
.keyboardType(.URL)
Button("Generate"){
UIApplication.shared.windows.first { $0.isKeyWindow }?.endEditing(
true)
qrCode = qrCodeGenerator.generateQRCode(forUrlString: urlInput)
urlInput = ""
}
.disabled(urlInput.isEmpty)
.padding(.leading)
}.padding()
Spacer()
if qrCode ==
nil{
EmptyStateView(width: geometry.size.width)
}
else {
QRCodeView(qrCode: qrCode!, width: geometry.size.width)
}
Spacer()
}
.navigationBarTitle("QR Code Generator")
.navigationBarItems(trailing: Button(action: {
assert(qrCode !=
nil,"Cant't save the image,qrCode is empty.")
imageSaver.saveImage(qrCode!.image)
}, label: {
Image(systemName: "square.and.arrow.down")
}))
.disabled(qrCode ==
nil)
.alert(item: $imageSaver.saveResult) { saveStatus
in
return alert(forStatus: saveStatus.saveStatus)
}
}
}
}
private
func alert(forStatus saveStatus:ImageSaveStatus)-> Alert{
switch saveStatus{
case .success:
return Alert(title: Text("Yes!"), message: Text("Your image of QRCode was succesfully saved to your photo libray"))
case .error:
return Alert(title: Text("Oops"),message: Text("Something went wrong we couldn't save your QRCode,please try again"))
case .libraryPermissionDenied:
return Alert(title: Text("Oops"), message: Text("This app needs acces to your photo library to save your QRCode"),
primaryButton: .cancel(Text("Ok")),
secondaryButton: .default(Text("Acces in settings")){
guard
let urlSettings = URL(string: UIApplication.openSettingsURLString)
else {
return
}
UIApplication.shared.open(urlSettings)
}
)
}
}
}
struct QRCodeView:View{
let qrCode:QRCode
let width:CGFloat
var body:
some View{
VStack{
Label("QR Code for: \(qrCode.url)",systemImage: "qrcode.viewfiner")
.lineLimit(3)
.padding()
Image(uiImage: qrCode.image)
.resizable()
.frame(width: width * 2 / 3, height: width * 2 / 3)
}
}
}
struct EmptyStateView:View{
let width:CGFloat
private
var imgaeLength:CGFloat{
width / 2.5
}
var body:
some View{
VStack{
Image(systemName: "qrcode")
.resizable()
.frame(width:imgaeLength,height: imgaeLength)
Text("Create your own QR code")
.padding(.top)
M
}
.foregroundColor(Color(UIColor.systemGray))
}
}
struct ContentView_Previews: PreviewProvider {
static
var previews:
some View {
ContentView()
}
}
BL
🌚
return Text(…)
попробуйKI
Д
BL
V
ForEach... { index in
Text(getFormattedTextBy(index: index)
}
func getFormattedTextBy(index: Int) -> String {
// приготовление текста
}