Сделайте выбор пути в swiftui

#ios #swift #swiftui

Вопрос:

Я хочу иметь возможность рисовать линию в swiftui, где выбирается только линия, это хорошо работает для вертикальных и горизонтальных линий, но когда линия расположена под углом, область попадания

Мой код для рисования линии от одного угла рамки до другого:

 struct AngleLine: Shape {
    func path(in rect: CGRect) -> Path {
        Path { path in
            path.move(to: CGPoint(x: rect.minX, y: rect.maxY))
            path.addLine(to: CGPoint(x: rect.maxX, y: rect.minY))
        }
    }
}
 

Затем, на мой взгляд, я вставил это в кнопку

 struct LineSelector: View {
    var lineWidth : CGFloat
    let dash : [CGFloat] = [6, 3]
    let size : CGFloat
    
    var body: some View {

        VStack{
            
            Button(action: {
                print("Hello")
            }) {
                AngleLine().stroke(style: StrokeStyle(lineWidth: lineWidth, dash: [6, 3])).fill(Color.red)
                
               }
           }
       }
   }
 

Результат смотрите на этом изображении.
Линия на экране

Проблема в том, что теперь кадр заполняет весь экран, и все становится кнопкой, когда цель состоит в том, чтобы только строка была кнопкой, а не всем кадром.

Ответ №1:

Вместо обертывания AngleLine() с помощью a Button вы можете добавить a .onTapGesture{} в Shape объект. Смотрите следующий код

 AngleLine().stroke(style: StrokeStyle(lineWidth: lineWidth, dash: [6, 3])).fill(Color.red)
    .onTapGesture { // <-- Adding the tap gesture
        print("Hello")
    }
 

Это предотвратит выполнение всей рамки фигуры в качестве кнопки. Смотрите выходные данные приведенного выше кода ниже.

введите описание изображения здесь