SwiftUI - изменение размера рамки изображения при увеличении - PullRequest
0 голосов
/ 12 января 2020

Я пытаюсь разрешить масштабирование изображения таким образом, чтобы размер содержащего фрейма также изменялся, а заголовок внизу перемещался вниз. Это внутри прокрутки, чтобы изображение можно было перемещать в увеличенном виде. Следующая половина кода работает, но изображение нельзя перетаскивать, как можно было ожидать из прокрутки. Кроме того, HStack обрезается слева, оставляя зазор справа.

    struct ImageView: View {

    @State var scale = CGFloat(1.0)
    @State var lastScaleValue: CGFloat = 1
    @State var frameWidth: CGFloat = 0
    @State var imageSize: CGFloat = 1
    @State private var selection = 0


    var body: some View {

        GeometryReader { geometry in

            ScrollView(){ //Scrollview for page

                ScrollView([.horizontal, .vertical]){//Scrollview for image

                    HStack{

                        Image(uiImage:  ImageSet.getImage(1))
                            .resizable()
//                            .scaledToFit()
//                            .aspectRatio(1, contentMode: .fit)
                            .scaleEffect(self.lastScaleValue)
                            .gesture(MagnificationGesture().onChanged { val in


                                if val <= 1 {
                                    self.frameWidth = geometry.size.width
                                }
                                else{
                                    self.frameWidth = geometry.size.width * val
                                }


                                print("Parent Width: \(geometry.size.width)")
                                print("Scale: \(val)")
                                print("Frame Width: \(self.frameWidth)")
                                }

                            )
                        .frame(minWidth: 0, maxWidth: .infinity,minHeight: 0,maxHeight: .infinity)

                    }
                    .padding(0)
                    .frame(minWidth: 0, maxWidth: self.frameWidth, minHeight: 0, maxHeight: self.frameWidth)
                    .background(Color.green)

                }
                .frame(minWidth: 0, maxWidth: geometry.size.width, minHeight: 0, maxHeight: self.frameWidth)
                .background(Color.yellow)


                Text("Text pushed down in resizing")
                Text("Text pushed down in resizing")


            }
                .onAppear {
                    UITableView.appearance().separatorStyle = .none
                    self.frameWidth = geometry.size.width
            }
                .navigationBarTitle(Text(self.horoscope.firstname), displayMode: .inline)

        }

enter image description here

...