aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukas Kusik <lukas.kusik@gmail.com>2024-05-02 11:57:52 +0200
committerLukas Kusik <lukas.kusik@gmail.com>2024-05-02 13:02:08 +0200
commit2a996b8ab52421c8b56a511cb8db5832aea20d41 (patch)
tree2595c6d6951b0c4d3e47fda2023b5dba0a7b5d16
parentedcad92cad74b7dddbad3edf3a5f6709884f2956 (diff)
Cap mask radius to image size
-rw-r--r--Demo/SwiftyCropDemo/ContentView.swift6
-rw-r--r--Sources/SwiftyCrop/Models/CropViewModel.swift8
2 files changed, 10 insertions, 4 deletions
diff --git a/Demo/SwiftyCropDemo/ContentView.swift b/Demo/SwiftyCropDemo/ContentView.swift
index f4e90ee..f4081a2 100644
--- a/Demo/SwiftyCropDemo/ContentView.swift
+++ b/Demo/SwiftyCropDemo/ContentView.swift
@@ -82,7 +82,7 @@ struct ContentView: View {
.frame(maxWidth: .infinity, alignment: .leading)
Button {
- maskRadius = UIScreen.main.bounds.width / 2
+ maskRadius = min(UIScreen.main.bounds.width, UIScreen.main.bounds.height) / 2
} label: {
Image(systemName: "arrow.up.left.and.arrow.down.right")
.font(.footnote)
@@ -135,7 +135,9 @@ struct ContentView: View {
// Example function for downloading an image
private func downloadExampleImage() async -> UIImage? {
- let urlString = "https://picsum.photos/1000/1200"
+ let portraitUrlString = "https://picsum.photos/1000/1200"
+ let landscapeUrlString = "https://picsum.photos/2000/1000"
+ let urlString = Int.random(in: 0...1) == 0 ? portraitUrlString : landscapeUrlString
guard let url = URL(string: urlString),
let (data, _) = try? await URLSession.shared.data(from: url),
let image = UIImage(data: data)
diff --git a/Sources/SwiftyCrop/Models/CropViewModel.swift b/Sources/SwiftyCrop/Models/CropViewModel.swift
index 9d5e16d..869d4f8 100644
--- a/Sources/SwiftyCrop/Models/CropViewModel.swift
+++ b/Sources/SwiftyCrop/Models/CropViewModel.swift
@@ -3,8 +3,12 @@ import UIKit
class CropViewModel: ObservableObject {
private let maxMagnificationScale: CGFloat
- var imageSizeInView: CGSize = .zero
- var maskRadius: CGFloat
+ var imageSizeInView: CGSize = .zero {
+ didSet {
+ maskRadius = min(maskRadius, min(imageSizeInView.width, imageSizeInView.height) / 2)
+ }
+ }
+ @Published var maskRadius: CGFloat
@Published var scale: CGFloat = 1.0
@Published var lastScale: CGFloat = 1.0