如何使用点击手势来偏移图像或形状视图

时间:2020-06-12 19:50:13

标签: ios swift swiftui uitapgesturerecognizer

我正在尝试使用SwiftUI进行制作,因此,如果我点击圆圈,图像或类似的东西,它将偏移到某个位置,如果再次点击,它将返回到位置,并以同样的方式来回切换。我找到了一个教程,该教程教我如何切换背景色。 https://www.ioscreator.com/tutorials/swiftui-gesture-tutorial。如果您不花心地阅读它,本质上,代码就是这样的:

body: ListView(
       children: <Widget>
       [
         Container(
           padding: EdgeInsets.all(5.0),
           child: Stack(

             children: <Widget>
                [
           Container
           (
             padding: EdgeInsets.fromLTRB(0,0,0,0),

             child: new Image
                (
                  image: new AssetImage('images/99.jpg'), 
                  fit: BoxFit.cover
                )
                ),

            Positioned(
              bottom: 0,
              right: 125,
              child: Container
              (
                padding: EdgeInsets.all(7.0),

                color: Colors.black.withOpacity(0.3),


                child: Text("The text", style: TextStyle(color: Colors.white, fontSize: 25.0), textAlign: TextAlign.center,), 


                ),
            )
            ,      

                ],
                ),
         ), 

       ],
      ),

我改变了

struct ContentView: View {
    // 1.
    @State private var didTap: Bool = false

    var body: some View {
        // 2.
        Text("Tap me")
            .frame(minWidth:0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
            // 3.
            .gesture(TapGesture()
                .onEnded {
                    self.didTap.toggle()
                }
            )
            // 4.
            .background(didTap ? Color.blue : Color.red)
    }
}

Text("Tap me")
    .frame(minWidth:0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)

我想知道是否有一种方法可以代替Circle() .frame(width: 100, height: 100) .foregroundColor(Color.red) 来将TapGesture布尔变量合并到.background(didTap ? Color.blue : Color.red)中 不知何故。

1 个答案:

答案 0 :(得分:0)

我希望这是您正在寻找的解决方案,我也改变了添加轻击手势的方式。

struct TestView: View {
    @State private var didTap: Bool = false

    private var xOffset: CGFloat {
        return didTap ? 10.0 : 0.0
    }

    var body: some View {
        // 2.
        Circle()
            .frame(width: 100, height: 100)
            .foregroundColor(Color.red)
            .onTapGesture {
                self.didTap.toggle()
        }
            //The x-offset depends on didTap State
            .offset(x: xOffset, y: 0.0)
    }}