Понимание scaleEffect в SwiftUI

Следующий код анимирует размер изображения, как только оно загружается, он анимирует его от половины его размера до полного размера, но есть кое-что, что я не совсем понимаю в параметрах в scaleFactor.

Может кто-нибудь объяснить параметр внутри модификатора scaleEffect?

  1. Почему он может принимать логический параметр?
  2. Как можно ввести параметр 1.0 : 0.5 диапазона шкалы?
  3. Что делает ??

Насколько я понимаю, модификатор scaleEffect принимает только два параметра: CGFloat и 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
                }
        }
    }
}

person fs_tigre    schedule 16.05.2020    source источник


Ответы (1)


Есть несколько заявленных перегруженных 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 (половина) в зависимости от соответствующего состояния представления.

person Asperi    schedule 16.05.2020
comment
Спасибо, что коснулись тернарных операторов, это было большой частью моей путаницы. - person fs_tigre; 16.05.2020