裁剪后,使SwiftUI的点击不超出范围

时间:2019-08-27 12:44:18

标签: ios swift swiftui

轻按注册即可进入裁剪后的视图范围。

看来,SwiftUI会在另一视图内以全角和全角布局图像,以为其提供宽高比填充的填充模式。很好,但是如果我想向视图添加轻击动作,则即使在剪切时,轻击也会在视图的边界之外注册。我可能做错了此事,或者有另一种方法。除此代码外,我还尝试使用矩形的.clippedShape和.contentShape。我如何将其移到裁剪框外的水龙头不在基础图像上对齐的位置。要重现切换到剪辑并点按该区域的图像,该图像将占据剪辑视图框架的外部。

import SwiftUI

struct ImageContainer : View {
    var body: some View {
        Image(systemName: "cube")
        .resizable()
        .scaledToFill()
        .clipped()
    }
}

struct ContentView: View {
    @State var isClipped = false
    @State var count = 0

    var body: some View {
        VStack{
            Toggle(isOn: $isClipped) {
                Text("Clip It ")
                .font(.title)
            }.frame(width: 175)
            ZStack{
                if self.isClipped == true{
                    ImageContainer()
                        .frame(width: 200, height: 200)
                        .contentShape(Rectangle())
                        .clipped()

                        .background(Color.blue)
                        .onTapGesture {
                            print("tapped mainContainer\(self.count)\n")
                            self.count += 1
                        }
                }else{
                    ImageContainer()
                        .frame(width: 200, height: 200)
                        .background(Color.blue)
                         .onTapGesture {
                            print("tapped mainContainer\(self.count)\n")
                            self.count += 1
                    }
                }
            }
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

2 个答案:

答案 0 :(得分:1)

我在控制可点击区域的图像上使用.contentShape(Rectangle())成功。

您可以尝试使用ZIndex,以便周围的视图捕获到匹配。但是我对此有好坏参半的结果,自iOS 14.1起AFAIK也出现了问题

答案 1 :(得分:0)

考虑到可识别的敲击手指大小,我使用以下方法:

python setup.py bdist_wheel

在您的示例中,此修饰符的效果在var body: some View { Image(systemName: "cube") .resizable() .scaledToFill() .allowsHitTesting(false) // !!! } 上具有良好的可见性