Created
May 1, 2024 15:29
-
-
Save takoikatakotako/822bc65a643f0538ef91b710c685951a to your computer and use it in GitHub Desktop.
SwiftUIで画像をピンチで拡大する(UIImageView + UIScrollView)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import SwiftUI | |
struct ContentView: View { | |
var body: some View { | |
ImageViewerView(imageName: "icon") | |
.ignoresSafeArea(.all, edges: .all) | |
} | |
} | |
#Preview { | |
ContentView() | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) {} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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