#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")
}
Это предотвратит выполнение всей рамки фигуры в качестве кнопки. Смотрите выходные данные приведенного выше кода ниже.