Hallo zusammen,
ich probiere mich gerade an einer Notizen App und möchte dort StickyNotes hinzufügen. Die StickyNotes sollen anpassbar sein (Größe ändern und Position verschieben). Die Position zu ändern funktioniert soweit. Allerdings funktioniert die Änderung der Größe gar nicht. Am besten funktioniert noch der Griffpunkt rechts unten, allerdings nur in der Höhe. Die anderen drei Griffpunkte funktionieren gar nicht, oder völlig unkontrolliert. Ich komme nicht weiter, woran das liegt. Kann mir jemand weiterhelfen?
Alles anzeigen
ich probiere mich gerade an einer Notizen App und möchte dort StickyNotes hinzufügen. Die StickyNotes sollen anpassbar sein (Größe ändern und Position verschieben). Die Position zu ändern funktioniert soweit. Allerdings funktioniert die Änderung der Größe gar nicht. Am besten funktioniert noch der Griffpunkt rechts unten, allerdings nur in der Höhe. Die anderen drei Griffpunkte funktionieren gar nicht, oder völlig unkontrolliert. Ich komme nicht weiter, woran das liegt. Kann mir jemand weiterhelfen?
Quellcode
- import SwiftUI
- import PencilKit
- struct NotesView: View {
- @State private var canvasView = PKCanvasView()
- @State private var toolPicker = PKToolPicker()
- @State private var isToolPickerVisible = false
- @State private var stickyNotes: [StickyNoteModel] = [] // Array für die Sticky Notes
- @State private var selectedColor: Color = .yellow // Standardfarbe für Sticky Notes
- var body: some View {
- VStack {
- // Werkzeugleiste mit zusätzlichen Optionen
- HStack {
- Button(action: toggleToolPicker) {
- Image(systemName: isToolPickerVisible ? "pencil.circle.fill" : "pencil.circle")
- }
- Button(action: createStickyNote) {
- Image(systemName: "note.text")
- }
- Button(action: addShape) {
- Image(systemName: "square.on.circle")
- }
- Button(action: addTextField) {
- Image(systemName: "textformat")
- }
- Button(action: addPhoto) {
- Image(systemName: "photo")
- }
- Button(action: undoLastAction) {
- Image(systemName: "arrow.uturn.backward")
- }
- Menu {
- // Farbauswahl für Sticky Notes
- Button(action: { selectedColor = .yellow }) {
- Text("Gelb")
- Image(systemName: "circle.fill").foregroundColor(.yellow)
- }
- Button(action: { selectedColor = .green }) {
- Text("Grün")
- Image(systemName: "circle.fill").foregroundColor(.green)
- }
- Button(action: { selectedColor = .blue }) {
- Text("Blau")
- Image(systemName: "circle.fill").foregroundColor(.blue)
- }
- Button(action: { selectedColor = .pink }) {
- Text("Pink")
- Image(systemName: "circle.fill").foregroundColor(.pink)
- }
- } label: {
- Label("Farbe", systemImage: "paintpalette")
- }
- }
- // Zeichenfläche (Canvas) für das Zeichnen
- ZStack {
- PKCanvasRepresentable(canvasView: $canvasView)
- .onAppear {
- toolPicker.setVisible(isToolPickerVisible, forFirstResponder: canvasView)
- toolPicker.addObserver(canvasView)
- canvasView.becomeFirstResponder() // Setze die Canvas als First Responder
- }
- .onChange(of: isToolPickerVisible) { newValue in
- toolPicker.setVisible(newValue, forFirstResponder: canvasView)
- if newValue {
- canvasView.becomeFirstResponder()
- }
- }
- .gesture(DragGesture(minimumDistance: 0).onChanged { _ in
- // Werkzeugleiste aktivieren, wenn der Apple Pencil benutzt wird
- if !isToolPickerVisible {
- isToolPickerVisible = true
- toolPicker.setVisible(true, forFirstResponder: canvasView)
- }
- })
- // Sticky Note-Ansicht auf der Zeichenfläche hinzufügen
- ForEach(stickyNotes.indices, id: \.self) { index in
- StickyNoteView(
- model: $stickyNotes[index] // Binde das Modell
- )
- }
- }
- }
- }
- // Sichtbarkeit des Werkzeugpickers umschalten und das Symbol ändern
- func toggleToolPicker() {
- isToolPickerVisible.toggle()
- toolPicker.setVisible(isToolPickerVisible, forFirstResponder: canvasView)
- }
- // Sticky Note erstellen und zur Liste hinzufügen
- func createStickyNote() {
- let newStickyNote = StickyNoteModel(color: selectedColor) // Verwende die ausgewählte Farbe
- stickyNotes.append(newStickyNote)
- }
- func addShape() {
- // Funktion, um eine Form hinzuzufügen
- }
- func addTextField() {
- // Funktion, um ein Textfeld hinzuzufügen
- }
- func addPhoto() {
- // Funktion, um ein Foto hinzuzufügen
- }
- func undoLastAction() {
- canvasView.undoManager?.undo()
- }
- }
- // Canvas-Representable zum Verbinden von UIKit's PKCanvasView mit SwiftUI
- struct PKCanvasRepresentable: UIViewRepresentable {
- @Binding var canvasView: PKCanvasView
- // Erstelle eine neue Instanz von PKCanvasView
- func makeUIView(context: Context) -> PKCanvasView {
- let newCanvasView = PKCanvasView()
- newCanvasView.drawingPolicy = .anyInput // Beispielkonfiguration
- newCanvasView.tool = canvasView.tool // Tool übernehmen, falls gesetzt
- return newCanvasView
- }
- // Aktualisiere die PKCanvasView-Eigenschaften basierend auf Änderungen
- func updateUIView(_ uiView: PKCanvasView, context: Context) {
- uiView.tool = canvasView.tool // Setze das aktuelle Tool
- // Weitere Einstellungen vornehmen, falls nötig
- }
- }