Избавьтесь от стандартной сенсорной анимации кнопки - PullRequest
1 голос
/ 24 октября 2019

Когда я реализую кнопку в SwiftUI, эта кнопка всегда имеет стандартную анимацию, когда вы нажимаете на нее. Небольшая непрозрачность анимации. Есть ли способ избавиться от этой анимации? Вот простой пример.

Вот небольшое видео -> https://imgur.com/ClWd7YH

import SwiftUI

struct ContentView: View {
var body: some View {

VStack{

  Button(action: {
    // do somethinh
  }) {
    VStack{

      ZStack{
        Circle()
          .fill(Color.white)
          .frame(width: 45, height: 45, alignment: .center)

        Image(systemName: "xmark.circle")
          .foregroundColor(Color.black)
          .font(Font.system(size: 18, weight: .thin))
          .padding(6)
      }

      Text("Press")
        .foregroundColor( Color.white)

    }.frame(width: 300, height: 300, alignment: .center)
  }
}.background(Color.green)
  }
}

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

Ответы [ 2 ]

1 голос
/ 25 октября 2019

Вы можете определить свой собственный ButtonStyle, который будет переопределять анимацию по умолчанию:

public struct ButtonWithoutAnimation: ButtonStyle {
    public func makeBody(configuration: Self.Configuration) -> some View {
        configuration.label
    }
}

Теперь просто установите стиль на Button:

Button(action: { .. } {
..
}.buttonStyle(ButtonWithoutAnimation())
1 голос
/ 24 октября 2019

Вы можете получить то, что хотите, создав свой собственный buttonStyle. Таким образом, вы должны указать анимацию для использования на кране. Если вы не укажете анимацию, кнопка не будет иметь анимации. Например:

struct NoAnimationButton: ButtonStyle {
    func makeBody(configuration: Self.Configuration) -> some View {
        configuration.label
    }
}

struct ContentView: View {
    var body: some View {
        VStack{
            Button(action: {
                // do somethinh
            }) {
                VStack{
                    ZStack{
                        Circle()
                            .fill(Color.white)
                            .frame(width: 45, height: 45, alignment: .center)
                    Image(systemName: "xmark.circle")
                        .foregroundColor(Color.black)
                        .font(Font.system(size: 18, weight: .thin))
                        .padding(6)
                    }
                    Text("Press")
                        .foregroundColor( Color.white)
                }
                .frame(width: 300, height: 300, alignment: .center)
            }
        }
        .background(Color.green)
        .buttonStyle(NoAnimationButton())
    }
}

Учтите, что вы всегда можете избежать использования Button представления и реализовать onTapGesture на всем своем съемном виде (или там, где вам это нужно):

struct ContentView: View {
    var body: some View {
        VStack{
            VStack{
                ZStack{
                    Circle()
                        .fill(Color.white)
                        .frame(width: 45, height: 45, alignment: .center)
                    Image(systemName: "xmark.circle")
                        .foregroundColor(Color.black)
                        .font(Font.system(size: 18, weight: .thin))
                        .padding(6)
                }
                Text("Press")
                    .foregroundColor( Color.white)
            }
            .frame(width: 300, height: 300, alignment: .center)
        }
        .background(Color.green)
        .onTapGesture {
            //manage click
        }
    }
}

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

РЕДАКТИРОВАТЬ: Просто для примера buttonStyle с анимацией:

struct ScaleEffectButton: ButtonStyle {
    func makeBody(configuration: Self.Configuration) -> some View {
        configuration.label
            .scaleEffect(configuration.isPressed ? 0.9 : 1)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...