Как определить, где масштабировать и панорамировать изображение в SwiftUI? - PullRequest
0 голосов
/ 16 января 2020

При разработке с SwiftUI я использую Image () и хотел бы иметь возможность не только увеличивать его, что я сейчас делаю, но хотел бы увеличивать его различные области и перемещаться по ним. в разные районы. Кажется, я могу увеличить его только из одной области в качестве источника увеличения (в центре), но хотел бы увеличить масштаб с того места, с которого начался жест, так сказать. Вот код на данный момент:

ScrollView([.horizontal, .vertical]) {
                Image(uiImage: UIImage(data: self.document.image)!)
                .resizable()
                .scaledToFit()
                .padding()
                .cornerRadius(8)
                .scaleEffect(self.scale, anchor: .center)
                .frame(width: geo.size.width, height: geo.size.height, alignment: .center)
                .gesture(MagnificationGesture()
                    .onChanged { val in
                        let delta = (val / self.lastScale)
                        self.lastScale = val
                        self.scale = (self.scale * delta)
                    }
                    .onEnded { val in
                        self.lastScale = 1.0
                    }
                )
                .onTapGesture(count: 2) {
                    self.scale = 1.0
                    self.lastScale = 1.0
                }
            }
            .frame(width: geo.size.width - 50, height: geo.size.height - 90, alignment: .center)
            .clipped()

Любая помощь по этому вопросу будет принята с благодарностью.

ОБНОВЛЕНО Код, кажется, помогает мне:

Image(uiImage: UIImage(data: self.document.image)!)
                .resizable()
                .scaledToFill()
                .padding()
                .cornerRadius(10)
                .scaleEffect(self.finalAmount + self.currentAmount)
                .offset(x: self.currentPosition.width, y: self.currentPosition.height)
                .frame(width: geo.size.width, height: geo.size.height, alignment: .center)
                .clipped()
                .scaleEffect(1.15)
                .sheet(isPresented: self.$isSheetActive) {
                    ShareSheet(activityItems: [self.MakeImageFileToShare(uiimage: UIImage(data: self.document.image)!)])
                }
                .gesture(MagnificationGesture()
                    .onChanged { value in
                         if self.finalAmount + value - 1 >= 1 {
                                  self.currentAmount = value - 1
                              }
                          }
                          .onEnded { amount in
                              self.finalAmount += self.currentAmount
                          self.currentAmount = 0
                    }
                .simultaneously(with: DragGesture()
                    .onChanged({ value in
                        self.currentPosition = CGSize(width: value.translation.width + self.newPosition.width, height: value.translation.height + self.newPosition.height)
                    })
                    .onEnded ({ value in
                        self.currentPosition = CGSize(width: value.translation.width + self.newPosition.width, height: value.translation.height + self.newPosition.height)
                        self.newPosition = self.currentPosition
                })))
...