Files
Schnappix/node_modules/expo-image/ios/ImageTransition.swift
T
2026-05-31 20:50:37 +02:00

68 lines
1.6 KiB
Swift

// Copyright 2022-present 650 Industries. All rights reserved.
import ExpoModulesCore
enum ImageTransitionTiming: String, Enumerable {
case easeInOut = "ease-in-out"
case easeIn = "ease-in"
case easeOut = "ease-out"
case linear = "linear"
func toAnimationOption() -> UIView.AnimationOptions {
switch self {
case .easeInOut:
return .curveEaseInOut
case .easeIn:
return .curveEaseIn
case .easeOut:
return .curveEaseOut
case .linear:
return .curveLinear
}
}
}
enum ImageTransitionEffect: String, Enumerable {
case crossDissolve = "cross-dissolve"
case flipFromTop = "flip-from-top"
case flipFromRight = "flip-from-right"
case flipFromBottom = "flip-from-bottom"
case flipFromLeft = "flip-from-left"
case curlUp = "curl-up"
case curlDown = "curl-down"
func toAnimationOption() -> UIView.AnimationOptions {
switch self {
case .crossDissolve:
return .transitionCrossDissolve
case .flipFromLeft:
return .transitionFlipFromLeft
case .flipFromRight:
return .transitionFlipFromRight
case .flipFromTop:
return .transitionFlipFromTop
case .flipFromBottom:
return .transitionFlipFromBottom
case .curlUp:
return .transitionCurlUp
case .curlDown:
return .transitionCurlDown
}
}
}
struct ImageTransition: Record {
@Field
var duration: Double = 100
@Field
var timing: ImageTransitionTiming = .easeInOut
@Field
var effect: ImageTransitionEffect = .crossDissolve
func toAnimationOptions() -> UIView.AnimationOptions {
return [timing.toAnimationOption(), effect.toAnimationOption()]
}
}