Основная причина состоит в том, чтобы применить жест увеличения к зажатой части изображения. По умолчанию он работает отлично, но всегда увеличивает в центре/выходе данного изображения. Как манипулировать этим, чтобы увеличить фактическую часть изображения? Если я увеличиваю левый верхний угол изображения, он должен оставаться в том же месте, где эта часть изображения, которую я хочу увеличить. < /P>
Где проблема? Пока вы его ущипните, он неправильно масштабирует изображение. Кажется, что смещение рассчитывается правильно, но понятия не имею, почему это не работает. < /P>
перетаскивание работает отлично, а не увеличивать. Это все. < /P>
Вот мой код: < /p>
Какова цель? Вы просто можете перемещать и масштабировать изображение со следующими ограничениями: < /p>
Изображение за шкалой не должно быть меньше, чем размер маски < /li> Смещение после масштаба не должно оставлять какое -либо пустое пространство в маске < /li>
>
Основная причина состоит в том, чтобы применить жест увеличения к зажатой части изображения. По умолчанию он работает отлично, но всегда увеличивает в центре/выходе данного изображения. Как манипулировать этим, чтобы увеличить фактическую часть изображения? Если я увеличиваю левый верхний угол изображения, он должен оставаться в том же месте, где эта часть изображения, которую я хочу увеличить. < /P> Где проблема? Пока вы его ущипните, он неправильно масштабирует изображение. Кажется, что смещение рассчитывается правильно, но понятия не имею, почему это не работает. < /P> перетаскивание работает отлично, а не увеличивать. Это все. < /P> Вот мой код: < /p> [code]struct WrapperForCropView: View { let image = UIImage( size: CGSize(width: 2100, height: 1200), gradientPoints: [ GradientPoint(location: 0, color: #colorLiteral(red: 0.7450980544, green: 0.1568627506, blue: 0.07450980693, alpha: 0.2530534771)), GradientPoint(location: 0.2, color: #colorLiteral(red: 0.9686274529, green: 0.78039217, blue: 0.3450980484, alpha: 0.5028884243)), GradientPoint(location: 0.4, color: #colorLiteral(red: 0.721568644, green: 0.8862745166, blue: 0.5921568871, alpha: 0.3388534331)), GradientPoint(location: 0.6, color: #colorLiteral(red: 0.2588235438, green: 0.7568627596, blue: 0.9686274529, alpha: 0.3458681778)), GradientPoint(location: 0.8, color: #colorLiteral(red: 0.2196078449, green: 0.007843137719, blue: 0.8549019694, alpha: 0.3851232394)) ] )! var body: some View { NavigationView { ZStack { Color.red GeometryReader { proxy in VStack { DemoCroppingView(uiImage: image, bounds: proxy.size) } .frame(width: proxy.size.width, height: proxy.size.height) .clipped() } } } } }
@available(iOS 17.0, *) struct DemoCroppingView: View { var uiImage: UIImage var bounds: CGSize @State private var offsetLimit: CGSize = .zero @State private var offset: CGSize = .zero @State private var lastOffset: CGSize = .zero @State private var scale: CGFloat = 1 @State private var lastScale: CGFloat = 1 @State private var imageViewSize: CGSize = .zero private let mask = CGSize(width: 300, height: 300)
private var dragGesture: some Gesture { DragGesture() .onChanged { gesture in offsetLimit = getOffsetLimit()
let width = min( max(-offsetLimit.width, lastOffset.width + gesture.translation.width), offsetLimit.width ) let height = min( max(-offsetLimit.height, lastOffset.height + gesture.translation.height), offsetLimit.height )
Какова цель? Вы просто можете перемещать и масштабировать изображение со следующими ограничениями: < /p>
🏆 Изображение за шкалой не должно быть меньше, чем размер маски < /li> 🏆 Смещение после масштаба не должно оставлять какое -либо пустое пространство в маске < /li> >