Skip to content
This repository was archived by the owner on Jun 17, 2023. It is now read-only.

Commit 54484d5

Browse files
author
Amir Khorsandi
committed
Use ratio for translation3d.minTranslate and translation3d.maxTranslate, this is breaking change but it's required for supporting different screen sizes
1 parent cfcf95a commit 54484d5

File tree

5 files changed

+56
-53
lines changed

5 files changed

+56
-53
lines changed

Lib/Scale/ScaleTransformView.swift

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -141,15 +141,15 @@ public extension ScaleTransformView {
141141
}
142142

143143
if let options = self.scaleOptions.translation3d {
144-
var x = options.translateRatios.0 * progress
145-
var y = options.translateRatios.1 * abs(progress)
146-
var z = options.translateRatios.2 * abs(progress)
147-
x = max(x, options.minTranslates.0)
148-
x = min(x, options.maxTranslates.0)
149-
y = max(y, options.minTranslates.1)
150-
y = min(y, options.maxTranslates.1)
151-
z = max(z, options.minTranslates.2)
152-
z = min(z, options.maxTranslates.2)
144+
var x = options.translateRatios.0 * progress * scalableView.bounds.width
145+
var y = options.translateRatios.1 * abs(progress) * scalableView.bounds.height
146+
var z = options.translateRatios.2 * abs(progress) * scalableView.bounds.width
147+
x = max(x, options.minTranslateRatios.0 * scalableView.bounds.width)
148+
x = min(x, options.maxTranslateRatios.0 * scalableView.bounds.width)
149+
y = max(y, options.minTranslateRatios.1 * scalableView.bounds.height)
150+
y = min(y, options.maxTranslateRatios.1 * scalableView.bounds.height)
151+
z = max(z, options.minTranslateRatios.2 * scalableView.bounds.width)
152+
z = min(z, options.maxTranslateRatios.2 * scalableView.bounds.width)
153153

154154
transform = CATransform3DTranslate(transform, x, y, z)
155155
}

Lib/Scale/ScaleTransformViewOptions.Translation3dOptions.swift

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,26 +14,29 @@ public extension ScaleTransformViewOptions {
1414

1515
// MARK: Properties
1616

17-
/// The translates(x,y,z) ratios (translateX = progress * translates.x)
17+
/// The translates(x,y,z) ratios
18+
/// (translateX = progress * translates.x * targetView.width)
19+
/// (translateY = progress * translates.y * targetView.height)
20+
/// (translateZ = progress * translates.z * targetView.width)
1821
public var translateRatios: (CGFloat, CGFloat, CGFloat)
1922

20-
/// The minimum translate values
21-
public var minTranslates: (CGFloat, CGFloat, CGFloat)
23+
/// The minimum translate ratios
24+
public var minTranslateRatios: (CGFloat, CGFloat, CGFloat)
2225

23-
/// The maximum translate values
24-
public var maxTranslates: (CGFloat, CGFloat, CGFloat)
26+
/// The maximum translate ratios
27+
public var maxTranslateRatios: (CGFloat, CGFloat, CGFloat)
2528

2629

2730
// MARK: Lifecycle
2831

2932
public init(
3033
translateRatios: (CGFloat, CGFloat, CGFloat),
31-
minTranslates: (CGFloat, CGFloat, CGFloat),
32-
maxTranslates: (CGFloat, CGFloat, CGFloat)
34+
minTranslateRatios: (CGFloat, CGFloat, CGFloat),
35+
maxTranslateRatios: (CGFloat, CGFloat, CGFloat)
3336
) {
3437
self.translateRatios = translateRatios
35-
self.minTranslates = minTranslates
36-
self.maxTranslates = maxTranslates
38+
self.minTranslateRatios = minTranslateRatios
39+
self.maxTranslateRatios = maxTranslateRatios
3740
}
3841
}
3942

Samples/PagingLayoutSamples/Modules/LayoutDesigner/LayoutDesignerViewModel.swift

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -166,67 +166,67 @@ class LayoutDesignerViewModel {
166166
]
167167

168168
let originalTranslation3dOptions = options.translation3d ?? ScaleTransformViewOptions.Translation3dOptions(
169-
translateRatios: (30, 0, -375 * 0.42),
170-
minTranslates: (-30, 0, -1_000),
171-
maxTranslates: (30, 0, 0)
169+
translateRatios: (0.1, 0, 0),
170+
minTranslateRatios: (-0.05, 0, 0.86),
171+
maxTranslateRatios: (0.05, 0, -0.86)
172172
)
173173

174174
let translation3dOptions: [LayoutDesignerOptionViewModel] = [
175175
.init(title: "Enabled", kind: .toggleSwitch(current: options.translation3d != nil) { n in
176176
update { $0.translation3d = !n ? nil : originalTranslation3dOptions }
177177
}),
178-
.init(title: "X ratio", kind: .singleSlider(current: options.translation3d?.translateRatios.0, range: -500...500) { n in
178+
.init(title: "X ratio", kind: .singleSlider(current: options.translation3d?.translateRatios.0, range: -5...5) { n in
179179
update {
180180
guard let current = $0.translation3d?.translateRatios else { return }
181181
$0.translation3d?.translateRatios = (n!, current.1, current.2)
182182
}
183183
}),
184-
.init(title: "X min", kind: .singleSlider(current: options.translation3d?.minTranslates.0, range: -2_000...2_000) { n in
184+
.init(title: "X min ratio", kind: .singleSlider(current: options.translation3d?.minTranslateRatios.0, range: -10...10) { n in
185185
update {
186-
guard let current = $0.translation3d?.minTranslates else { return }
187-
$0.translation3d?.minTranslates = (n!, current.1, current.2)
186+
guard let current = $0.translation3d?.minTranslateRatios else { return }
187+
$0.translation3d?.minTranslateRatios = (n!, current.1, current.2)
188188
}
189189
}),
190-
.init(title: "X max", kind: .singleSlider(current: options.translation3d?.maxTranslates.0, range: -2_000...2_000) { n in
190+
.init(title: "X max ratio", kind: .singleSlider(current: options.translation3d?.maxTranslateRatios.0, range: -10...10) { n in
191191
update {
192-
guard let current = $0.translation3d?.maxTranslates else { return }
193-
$0.translation3d?.maxTranslates = (n!, current.1, current.2)
192+
guard let current = $0.translation3d?.maxTranslateRatios else { return }
193+
$0.translation3d?.maxTranslateRatios = (n!, current.1, current.2)
194194
}
195195
}),
196-
.init(title: "Y ratio", kind: .singleSlider(current: options.translation3d?.translateRatios.1, range: -500...500) { n in
196+
.init(title: "Y ratio", kind: .singleSlider(current: options.translation3d?.translateRatios.1, range: -5...5) { n in
197197
update {
198198
guard let current = $0.translation3d?.translateRatios else { return }
199199
$0.translation3d?.translateRatios = (current.0, n!, current.2)
200200
}
201201
}),
202-
.init(title: "Y min", kind: .singleSlider(current: options.translation3d?.minTranslates.1, range: -2_000...2_000) { n in
202+
.init(title: "Y min ratio", kind: .singleSlider(current: options.translation3d?.minTranslateRatios.1, range: -10...10) { n in
203203
update {
204-
guard let current = $0.translation3d?.minTranslates else { return }
205-
$0.translation3d?.minTranslates = (current.0, n!, current.2)
204+
guard let current = $0.translation3d?.minTranslateRatios else { return }
205+
$0.translation3d?.minTranslateRatios = (current.0, n!, current.2)
206206
}
207207
}),
208-
.init(title: "Y max", kind: .singleSlider(current: options.translation3d?.maxTranslates.1, range: -2_000...2_000) { n in
208+
.init(title: "Y max ratio", kind: .singleSlider(current: options.translation3d?.maxTranslateRatios.1, range: -10...10) { n in
209209
update {
210-
guard let current = $0.translation3d?.maxTranslates else { return }
211-
$0.translation3d?.maxTranslates = (current.0, n!, current.2)
210+
guard let current = $0.translation3d?.maxTranslateRatios else { return }
211+
$0.translation3d?.maxTranslateRatios = (current.0, n!, current.2)
212212
}
213213
}),
214-
.init(title: "Z ratio", kind: .singleSlider(current: options.translation3d?.translateRatios.2, range: -500...500) { n in
214+
.init(title: "Z ratio", kind: .singleSlider(current: options.translation3d?.translateRatios.2, range: -5...5) { n in
215215
update {
216216
guard let current = $0.translation3d?.translateRatios else { return }
217217
$0.translation3d?.translateRatios = (current.0, current.1, n!)
218218
}
219219
}),
220-
.init(title: "Z min", kind: .singleSlider(current: options.translation3d?.minTranslates.2, range: -2_000...2_000) { n in
220+
.init(title: "Z min ratio", kind: .singleSlider(current: options.translation3d?.minTranslateRatios.2, range: -10...10) { n in
221221
update {
222-
guard let current = $0.translation3d?.minTranslates else { return }
223-
$0.translation3d?.minTranslates = (current.0, current.1, n!)
222+
guard let current = $0.translation3d?.minTranslateRatios else { return }
223+
$0.translation3d?.minTranslateRatios = (current.0, current.1, n!)
224224
}
225225
}),
226-
.init(title: "Z max", kind: .singleSlider(current: options.translation3d?.maxTranslates.2, range: -2_000...2_000) { n in
226+
.init(title: "Z max ratio", kind: .singleSlider(current: options.translation3d?.maxTranslateRatios.2, range: -10...10) { n in
227227
update {
228-
guard let current = $0.translation3d?.maxTranslates else { return }
229-
$0.translation3d?.maxTranslates = (current.0, current.1, n!)
228+
guard let current = $0.translation3d?.maxTranslateRatios else { return }
229+
$0.translation3d?.maxTranslateRatios = (current.0, current.1, n!)
230230
}
231231
})
232232
]

Samples/PagingLayoutSamples/Modules/LayoutDesigner/OptionsCodeGenerator.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -202,9 +202,9 @@ private extension ScaleTransformViewOptions.Translation3dOptions {
202202
func generateInitCode() -> String {
203203
"""
204204
.init(
205-
translateRatios: (\(translateRatios.0), \(translateRatios.1), \(translateRatios.2)),
206-
minTranslates: (\(minTranslates.0), \(minTranslates.1), \(minTranslates.2)),
207-
maxTranslates: (\(maxTranslates.0), \(maxTranslates.1), \(maxTranslates.2))
205+
translateRatios: (\(translateRatios.0.format()), \(translateRatios.1.format()), \(translateRatios.2.format())),
206+
minTranslateRatios: (\(minTranslateRatios.0.format()), \(minTranslateRatios.1.format()), \(minTranslateRatios.2.format())),
207+
maxTranslateRatios: (\(maxTranslateRatios.0.format()), \(maxTranslateRatios.1.format()), \(maxTranslateRatios.2.format()))
208208
)
209209
"""
210210
}

Samples/PagingLayoutSamples/Modules/Shapes/ShapeLayout+ScaleOptions.swift

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,9 @@ extension ShapeLayout {
6060
minTranslationRatio: CGPoint(x: -1, y: 0),
6161
maxTranslationRatio: CGPoint(x: 1, y: 1),
6262
rotation3d: ScaleTransformViewOptions.Rotation3dOptions(angle: .pi / 15, minAngle: -.pi / 3, maxAngle: .pi / 3, x: 0, y: 0, z: 1, m34: -0.004),
63-
translation3d: .init(translateRatios: (230, 395 * 0.1, 0),
64-
minTranslates: (-1_000, -395, -100),
65-
maxTranslates: (1_000, 395, -100))
63+
translation3d: .init(translateRatios: (0.9, 0.1, 0),
64+
minTranslateRatios: (-3, -0.8, -0.3),
65+
maxTranslateRatios: (3, 0.8, -0.3))
6666
)
6767
case .scaleCylinder:
6868
return ScaleTransformViewOptions(
@@ -74,7 +74,7 @@ extension ShapeLayout {
7474
maxTranslationRatio: .zero,
7575
shadowEnabled: false,
7676
rotation3d: .init(angle: .pi / 4, minAngle: -.pi, maxAngle: .pi, x: 0, y: 1, z: 0, m34: -0.000_4 - 0.8 * 0.000_2 ),
77-
translation3d: .init(translateRatios: (0, 0, 0), minTranslates: (0, 0, 380), maxTranslates: (0, 0, 380))
77+
translation3d: .init(translateRatios: (0, 0, 0), minTranslateRatios: (0, 0, 1.25), maxTranslateRatios: (0, 0, 1.25))
7878
)
7979
case .scaleInvertedCylinder:
8080
return ScaleTransformViewOptions(
@@ -86,9 +86,9 @@ extension ShapeLayout {
8686
maxTranslationRatio: .zero,
8787
shadowEnabled: false,
8888
rotation3d: .init(angle: .pi / 3, minAngle: -.pi, maxAngle: .pi, x: 0, y: -1, z: 0, m34: -0.002),
89-
translation3d: .init(translateRatios: (30, 0, 0),
90-
minTranslates: (-15, 0, 240),
91-
maxTranslates: (15, 0, -240))
89+
translation3d: .init(translateRatios: (0.1, 0, 0),
90+
minTranslateRatios: (-0.05, 0, 0.86),
91+
maxTranslateRatios: (0.05, 0, -0.86))
9292
)
9393
case .scaleCoverFlow:
9494
return ScaleTransformViewOptions(
@@ -100,7 +100,7 @@ extension ShapeLayout {
100100
maxTranslationRatio: .zero,
101101
shadowEnabled: true,
102102
rotation3d: .init(angle: .pi / 1.65, minAngle: -.pi / 3, maxAngle: .pi / 3, x: 0, y: -1, z: 0, m34: -0.000_5),
103-
translation3d: .init(translateRatios: (30, 0, -445 * 0.42), minTranslates: (-30, 0, -1_000), maxTranslates: (30, 0, 0))
103+
translation3d: .init(translateRatios: (0.1, 0, -0.7), minTranslateRatios: (-0.1, 0, -3), maxTranslateRatios: (0.1, 0, 0))
104104
)
105105
default:
106106
return nil

0 commit comments

Comments
 (0)