如何在 SwiftUI 中屏蔽/剪辑图像的底部?

Posted

技术标签:

【中文标题】如何在 SwiftUI 中屏蔽/剪辑图像的底部?【英文标题】:How to mask/clip the bottom part of an Image in SwiftUI? 【发布时间】:2019-07-23 08:37:22 【问题描述】:

目前在 SwiftUI 中屏蔽图像似乎非常简单,可以使用以下方法实现:

.clipShape(RoundedRectangle(cornerRadius:20,
                                        style: .continuous))

甚至.mask()。有没有办法通过指定.center.bottom、.etc 来控制图像的哪一部分被屏蔽?到目前为止,我一直在使用偏移量,但我想知道是否有更简单的方法。

【问题讨论】:

【参考方案1】:

.clipShape() 需要一个形状,所以如果您要经常剪裁底部,您可以创建一个临时形状。像这样的:

import SwiftUI

struct ContentView: View 
    var body: some View 
        Image("mypic")
            .aspectRatio(contentMode: .fit)
            .clipShape(BottomClipper(bottom: 100))
    


struct BottomClipper: Shape 
    let bottom: CGFloat

    func path(in rect: CGRect) -> Path 
        Rectangle().path(in: CGRect(x: 0, y: rect.size.height - bottom, width: rect.size.width, height: bottom))
    

【讨论】:

【参考方案2】:

斯威夫特 1.0

您可以将填充与形状结合使用。这可能是您正在寻找的更简单的方法?

Image("profile")
    // Add padding to sides of the shape to control what is masked
    .mask(Rectangle().padding(.bottom, 20))
    .border(Color.orange)

(摘自《SwiftUI 视图》一书)

【讨论】:

以上是关于如何在 SwiftUI 中屏蔽/剪辑图像的底部?的主要内容,如果未能解决你的问题,请参考以下文章

将 UIImage 剪辑到 UIBezierPath(不屏蔽)

如何在 android/andengine 中剪辑或屏蔽实体?

如何将底部边缘与上方视图的中心对齐 swiftui

如何阻止扩展舞台的动画剪辑的边缘进入 AS3 中的舞台边界?

在 KineticJS 中使用多边形蒙版/剪辑图像

SwiftUI:底部对齐不同帧大小的文本和图像