Применить пунктирную границу к маскированному изображению в SwiftUI - PullRequest
0 голосов
/ 13 февраля 2020

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

Image(uiImage: self.helper.loadedImage!)
.resizable()
.scaledToFill()
.foregroundColor(Color.clear)
.background(Color.clear)
.frame(width: 200, height: 200, alignment: .center)
.clipped()
.mask(Image(uiImage: self.helper.loadedMaskImage!)
.resizable()
.frame(width: 200, height: 200, alignment: .center))

Это изображение отображается правильно. Если загруженныйMaskImage является кругом, например, я вижу исходное изображение в форме круга. Теперь я хотел бы показать пунктирную границу на этом изображении. Но я не хочу использовать какую-либо конкретную c форму, потому что загруженный маска может быть чем угодно во время выполнения. Это возможно без погружения обратно в UIKit UIView?

РЕДАКТИРОВАТЬ: Вот как я могу замаскировать вид. В этом случае я использую изображение круга в качестве маски, и результат правильный. Кроме того, я хотел бы иметь пунктирную границу, имеющую такую ​​же форму этого круга.

enter image description here

1 Ответ

0 голосов
/ 13 февраля 2020

Пунктирная граница может быть достигнута с использованием штрихового штриха цвета над изображением с использованием ZStack

 Circle()
    .stroke(Color.blue, style: StrokeStyle(lineWidth:5 , lineCap: .round, dash:[10, 5]))
    .frame(width: 200, height: 200)


Аргумент dash является массив, где здесь это означает, что для каждых 10 длин показа границы должно быть 5 длин без границы, которая отображается как пунктирная граница,

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

Вы можете установить первое свойство в любое значение, например Color.black.opacity(0.4) или даже LinearGradient, если вы будете sh, так что ...

...