Skip to content

Commit 231627b

Browse files
authored
Merge pull request #116 from SDWebImage/feature_convenient_transition_with_duration
Feature convenient transition with duration
2 parents 28e6849 + fbd5a53 commit 231627b

File tree

3 files changed

+48
-6
lines changed

3 files changed

+48
-6
lines changed

Example/SDWebImageSwiftUIDemo/ContentView.swift

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -173,8 +173,7 @@ struct ContentView: View {
173173
WebImage(url: URL(string:url), isAnimating: self.$animated)
174174
.resizable()
175175
.indicator(.activity)
176-
.animation(.easeInOut(duration: 0.5))
177-
.transition(.fade)
176+
.transition(.fade(duration: 0.5))
178177
.scaledToFit()
179178
.frame(width: CGFloat(100), height: CGFloat(100), alignment: .center)
180179
#endif
@@ -187,8 +186,7 @@ struct ContentView: View {
187186
}
188187
*/
189188
.indicator(.activity)
190-
.animation(.easeInOut(duration: 0.5))
191-
.transition(.fade)
189+
.transition(.fade(duration: 0.5))
192190
.scaledToFit()
193191
.frame(width: CGFloat(100), height: CGFloat(100), alignment: .center)
194192
}

README.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,8 +122,7 @@ var body: some View {
122122
Rectangle().foregroundColor(.gray)
123123
}
124124
.indicator(.activity) // Activity Indicator
125-
.animation(.easeInOut(duration: 0.5)) // Animation Duration
126-
.transition(.fade) // Fade Transition
125+
.transition(.fade(duration: 0.5)) // Fade Transition with duration
127126
.scaledToFit()
128127
.frame(width: 300, height: 300, alignment: .center)
129128
}

SDWebImageSwiftUI/Classes/Transition/Transition.swift

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,31 +18,76 @@ extension AnyTransition {
1818
return AnyTransition.asymmetric(insertion: insertion, removal: removal)
1919
}
2020

21+
/// Fade-in transition with duration
22+
/// - Parameter duration: transition duration, use ease-in-out
23+
/// - Returns: A transition with duration
24+
public static func fade(duration: Double) -> AnyTransition {
25+
let insertion = AnyTransition.opacity.animation(.easeInOut(duration: duration))
26+
let removal = AnyTransition.identity
27+
return AnyTransition.asymmetric(insertion: insertion, removal: removal)
28+
}
29+
2130
/// Flip from left transition
2231
public static var flipFromLeft: AnyTransition {
2332
let insertion = AnyTransition.move(edge: .leading)
2433
let removal = AnyTransition.identity
2534
return AnyTransition.asymmetric(insertion: insertion, removal: removal)
2635
}
2736

37+
/// Flip from left transition with duration
38+
/// - Parameter duration: transition duration, use ease-in-out
39+
/// - Returns: A transition with duration
40+
public static func flipFromLeft(duration: Double) -> AnyTransition {
41+
let insertion = AnyTransition.move(edge: .leading).animation(.easeInOut(duration: duration))
42+
let removal = AnyTransition.identity
43+
return AnyTransition.asymmetric(insertion: insertion, removal: removal)
44+
}
45+
2846
/// Flip from right transition
2947
public static var flipFromRight: AnyTransition {
3048
let insertion = AnyTransition.move(edge: .trailing)
3149
let removal = AnyTransition.identity
3250
return AnyTransition.asymmetric(insertion: insertion, removal: removal)
3351
}
3452

53+
/// Flip from right transition with duration
54+
/// - Parameter duration: transition duration, use ease-in-out
55+
/// - Returns: A transition with duration
56+
public static func flipFromRight(duration: Double) -> AnyTransition {
57+
let insertion = AnyTransition.move(edge: .trailing).animation(.easeInOut(duration: duration))
58+
let removal = AnyTransition.identity
59+
return AnyTransition.asymmetric(insertion: insertion, removal: removal)
60+
}
61+
3562
/// Flip from top transition
3663
public static var flipFromTop: AnyTransition {
3764
let insertion = AnyTransition.move(edge: .top)
3865
let removal = AnyTransition.identity
3966
return AnyTransition.asymmetric(insertion: insertion, removal: removal)
4067
}
4168

69+
/// Flip from top transition with duration
70+
/// - Parameter duration: transition duration, use ease-in-out
71+
/// - Returns: A transition with duration
72+
public static func flipFromTop(duration: Double) -> AnyTransition {
73+
let insertion = AnyTransition.move(edge: .top).animation(.easeInOut(duration: duration))
74+
let removal = AnyTransition.identity
75+
return AnyTransition.asymmetric(insertion: insertion, removal: removal)
76+
}
77+
4278
/// Flip from bottom transition
4379
public static var flipFromBottom: AnyTransition {
4480
let insertion = AnyTransition.move(edge: .bottom)
4581
let removal = AnyTransition.identity
4682
return AnyTransition.asymmetric(insertion: insertion, removal: removal)
4783
}
84+
85+
/// Flip from bottom transition with duration
86+
/// - Parameter duration: transition duration, use ease-in-out
87+
/// - Returns: A transition with duration
88+
public static func flipFromBottom(duration: Double) -> AnyTransition {
89+
let insertion = AnyTransition.move(edge: .bottom).animation(.easeInOut(duration: duration))
90+
let removal = AnyTransition.identity
91+
return AnyTransition.asymmetric(insertion: insertion, removal: removal)
92+
}
4893
}

0 commit comments

Comments
 (0)