Skip to content

Instantly share code, notes, and snippets.

@takoikatakotako
Created May 1, 2024 15:29
Show Gist options
  • Save takoikatakotako/822bc65a643f0538ef91b710c685951a to your computer and use it in GitHub Desktop.
Save takoikatakotako/822bc65a643f0538ef91b710c685951a to your computer and use it in GitHub Desktop.
SwiftUIで画像をピンチで拡大する(UIImageView + UIScrollView)
import SwiftUI
struct ContentView: View {
var body: some View {
ImageViewerView(imageName: "icon")
.ignoresSafeArea(.all, edges: .all)
}
}
#Preview {
ContentView()
}
import SwiftUI
struct ImageViewerView: UIViewRepresentable {
let imageName: String
func makeUIView(context: Context) -> UIImageViewerView {
let view = UIImageViewerView(imageName: imageName)
return view
}
func updateUIView(_ uiView: UIImageViewerView, context: Context) {}
}
import UIKit
public class UIImageViewerView: UIView {
private let imageName: String
private let scrollView: UIScrollView = UIScrollView()
private let imageView: UIImageView = UIImageView()
required init(imageName: String) {
self.imageName = imageName
super.init(frame: .zero)
scrollView.delegate = self
scrollView.maximumZoomScale = 3.0
scrollView.minimumZoomScale = 1.0
// if you want to disable indicater
// scrollView.showsHorizontalScrollIndicator = false
// scrollView.showsVerticalScrollIndicator = false
addSubview(scrollView)
imageView.image = UIImage(named: imageName)
imageView.contentMode = .scaleAspectFit
scrollView.addSubview(imageView)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
public override func layoutSubviews() {
super.layoutSubviews()
scrollView.frame = bounds
imageView.frame = scrollView.frame
}
}
extension UIImageViewerView: UIScrollViewDelegate {
public func viewForZooming(in scrollView: UIScrollView) -> UIView? {
return imageView
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment