Как использовать ZStack в UIKit

Это мой код SwiftUI, он отлично работает. пользователь может рисовать и нажимать кнопку без проблем. Я хочу, чтобы пользователь рисовал на чем угодно, ярлыках, кнопках и т. д. Но как я могу сделать это с помощью UIKit? любая идея?

(я редактировал набор карандашей Kavsoft для swiftui: https://kavsoft.tech/SwiftUI_2.0/Pencil_Kit/)

import SwiftUI
import PencilKit

struct ContentView: View {
    var body: some View {
        myContentView()
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        myContentView()
    }
}

struct myContentView: View {

    @State var canvas = PKCanvasView()
    @State var isDraw = true
    @State var color : UIColor = .black
    @State var type : PKInkingTool.InkType = .pen
    @State var colorPicker = false
    @State var mytextSize = CGFloat(UIScreen.main.bounds.height * 0.032)
    @State var kalemlikSize = CGFloat(UIScreen.main.bounds.height * 0.038)
    @State private var selectedFrameworkIndex = 0
   var body: some View {
    
    VStack{
        HStack{ //MARK: HEADER
            Spacer()
 
            Button(action: {
                                             }) {
                                                                       Text("Title").foregroundColor(.black).font(.title)
                                                                       
                                            }
            Spacer()
        }.padding(5)
        ZStack{
            PKCanvasRepresentation(canvas: $canvas, isDraw: $isDraw,type: $type,color: $color)
            VStack(alignment: .leading, spacing: 10){
                //Spacer()
               
                   Text("Label1")
                Text("Label2").font(.title)
                
                   Button(action:{ // MARK: Şık A
                       print("button pressed")
                   
                   }){
                   
                    Text("my blue button")
                 
                    Spacer()
                   }.padding(5)
                
            
                Spacer()
                HStack(alignment:.bottom, spacing: 20){
                    Spacer().frame(width: 0.1)
                    Group{
                                
                                    Spacer()
                                    Button(action: {
                               
                                        self.canvas.isUserInteractionEnabled = true
                                        self.type = .pen
                                        self.isDraw = true
                                        self.color = .black
                                 
                                        
                                    }) {
                                        
                                        Image(systemName: "pencil.tip")
                                            .resizable().aspectRatio(contentMode: .fit).frame(height: kalemlikSize, alignment: .center).accentColor(.black)
                                    }
                                    
                                    
                                       Button(action: {
                                              
                                              
                                        self.canvas.drawing = PKDrawing()
                                        
                                          }) {
                                              
                                            Image(systemName: "trash").resizable().aspectRatio(contentMode: .fit).frame(height: mytextSize * 1.2, alignment: .bottom)
                                            
                                          }
                                    
                                    Spacer()
                        
                    }
 Spacer().frame(width: 0.1)
                    
                }
            }.padding(5)
               
                   
           }
    }
    
       
   }
        
}


struct PKCanvasRepresentation : UIViewRepresentable {
    
    
    @Binding var canvas : PKCanvasView
    @Binding var isDraw : Bool
    @Binding var type : PKInkingTool.InkType
    @Binding var color : UIColor
    
   
    
    var ink : PKInkingTool{
        
    PKInkingTool(type, color: color  )
    }
    
    let eraser = PKEraserTool(.vector)
    
    func makeUIView(context: Context) -> PKCanvasView{
        
       
        
        canvas.tool = isDraw ? ink : eraser
        
        return canvas
    }
    
    func updateUIView(_ uiView: PKCanvasView, context: Context) {
        
     
     
        uiView.tool = isDraw ? ink : eraser
    }
    

}

Это мой код SwiftUI, он отлично работает. пользователь может рисовать и нажимать кнопку без проблем. Я хочу, чтобы пользователь рисовал на чем угодно, ярлыках, кнопках и т. д. Но как я могу сделать это с помощью UIKit? любая идея?

1 ответ

Решение

Если ваш код работает нормально, вы можете просто поместить свой код в UIHostingController

import SwiftUI
class SwiftUI_ViewController: UIViewController {
    
    let contentView = UIHostingController(rootView: myContentView())
    override func viewDidLoad() {
        addChild(contentView)
        view.addSubview(contentView.view)
    }
}

Затем инициализируйте UIViewController как и любой другой UIViewController.

Примечание. Регулировка ограничений в Storyboard или UIViewController может быть необходимо.

Другие вопросы по тегам