如何在 UIKit 中使用 ZStack
How to use ZStack in UIKit
这是我的 SwiftUI 代码,它工作正常。
用户可以毫无问题地绘制和按下按钮。
我希望用户在任何东西、标签、按钮等上进行绘制。
但是我怎么能用 UIKit 做到这一点呢?
有什么想法吗?
(我为 swiftui 编辑了 Kavsoft 的代码铅笔包: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 做到这一点呢?
有什么想法吗?
如果您的代码工作正常,您可以将代码放入 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
中的约束。
这是我的 SwiftUI 代码,它工作正常。 用户可以毫无问题地绘制和按下按钮。 我希望用户在任何东西、标签、按钮等上进行绘制。 但是我怎么能用 UIKit 做到这一点呢? 有什么想法吗?
(我为 swiftui 编辑了 Kavsoft 的代码铅笔包: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 做到这一点呢? 有什么想法吗?
如果您的代码工作正常,您可以将代码放入 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
中的约束。