1

以下代码在加载图像后立即对其大小进行动画处理,将其从一半大小设置为完整大小,但我对scaleFactor.

有人可以解释scaleEffect修饰符内的参数吗?

  1. 为什么它可以采用布尔参数?
  2. 如何输入比例范围1.0 : 0.5参数?
  3. 做什么的?

据我所见,scaleEffect修饰符只接受两个参数, aCGFloat和 a UnitPoint

struct ContentView: View {
    @State private var scaleFactor = false
    var body: some View {
        VStack {
            Image("top-image")
                .scaleEffect(scaleFactor ? 1.0 : 0.5)
                .animation(.easeInOut(duration: 1.0))
                .onAppear() {
                    self.scaleFactor = true
                }
        }
    }
}
4

1 回答 1

3

有几个声明重载的 scaleEffect

extension View {

    @inlinable public func scaleEffect(_ scale: CGSize, anchor: UnitPoint = .center) -> some View

    @inlinable public func scaleEffect(_ s: CGFloat, anchor: UnitPoint = .center) -> some View

    @inlinable public func scaleEffect(x: CGFloat = 0.0, y: CGFloat = 0.0, anchor: UnitPoint = .center) -> some View
}

在有问题的示例中,它使用了第二个,所以它实际上是

        Image("top-image")
            .scaleEffect(scaleFactor ? 1.0 : 0.5, anchor: .center)

这被记录为

相对于锚点,在水平和垂直方向上按给定数量缩放此视图的渲染输出。

并且scaleFactor ? 1.0 : 0.5意味着仅适用于第一个参数的就地三元运算符,scale根据相应的视图状态应用 1.0(身份)或 0.5(一半)。

于 2020-05-16T14:22:27.910 回答