Implement UIImagePickerWrapper Coordinator functionality

This commit is contained in:
CypherPoet 2019-11-29 13:52:13 -06:00
parent a1836ce8c4
commit 4321d5dfee
5 changed files with 83 additions and 11 deletions

View File

@ -11,6 +11,7 @@
F329953023908CB500D2D963 /* ImageFilteringViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F329952F23908CB500D2D963 /* ImageFilteringViewModel.swift */; }; F329953023908CB500D2D963 /* ImageFilteringViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F329952F23908CB500D2D963 /* ImageFilteringViewModel.swift */; };
F32995322390C29100D2D963 /* ImageFilteringContainerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F32995312390C29100D2D963 /* ImageFilteringContainerView.swift */; }; F32995322390C29100D2D963 /* ImageFilteringContainerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F32995312390C29100D2D963 /* ImageFilteringContainerView.swift */; };
F3299535239181A900D2D963 /* UIImagePickerWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3299534239181A900D2D963 /* UIImagePickerWrapper.swift */; }; F3299535239181A900D2D963 /* UIImagePickerWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3299534239181A900D2D963 /* UIImagePickerWrapper.swift */; };
F329953723919B6700D2D963 /* UIImagePickerWrapper+Coordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = F329953623919B6700D2D963 /* UIImagePickerWrapper+Coordinator.swift */; };
F352424E238F3F18009DF1F9 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F352424D238F3F18009DF1F9 /* AppDelegate.swift */; }; F352424E238F3F18009DF1F9 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F352424D238F3F18009DF1F9 /* AppDelegate.swift */; };
F3524250238F3F18009DF1F9 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F352424F238F3F18009DF1F9 /* SceneDelegate.swift */; }; F3524250238F3F18009DF1F9 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F352424F238F3F18009DF1F9 /* SceneDelegate.swift */; };
F3524254238F3F19009DF1F9 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F3524253238F3F19009DF1F9 /* Assets.xcassets */; }; F3524254238F3F19009DF1F9 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F3524253238F3F19009DF1F9 /* Assets.xcassets */; };
@ -26,6 +27,7 @@
F329952F23908CB500D2D963 /* ImageFilteringViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageFilteringViewModel.swift; sourceTree = "<group>"; }; F329952F23908CB500D2D963 /* ImageFilteringViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageFilteringViewModel.swift; sourceTree = "<group>"; };
F32995312390C29100D2D963 /* ImageFilteringContainerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageFilteringContainerView.swift; sourceTree = "<group>"; }; F32995312390C29100D2D963 /* ImageFilteringContainerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageFilteringContainerView.swift; sourceTree = "<group>"; };
F3299534239181A900D2D963 /* UIImagePickerWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIImagePickerWrapper.swift; sourceTree = "<group>"; }; F3299534239181A900D2D963 /* UIImagePickerWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIImagePickerWrapper.swift; sourceTree = "<group>"; };
F329953623919B6700D2D963 /* UIImagePickerWrapper+Coordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImagePickerWrapper+Coordinator.swift"; sourceTree = "<group>"; };
F352424A238F3F18009DF1F9 /* Instafilter.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Instafilter.app; sourceTree = BUILT_PRODUCTS_DIR; }; F352424A238F3F18009DF1F9 /* Instafilter.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Instafilter.app; sourceTree = BUILT_PRODUCTS_DIR; };
F352424D238F3F18009DF1F9 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; }; F352424D238F3F18009DF1F9 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
F352424F238F3F18009DF1F9 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; }; F352424F238F3F18009DF1F9 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; };
@ -52,11 +54,20 @@
F32995332391817800D2D963 /* Views */ = { F32995332391817800D2D963 /* Views */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
F3299534239181A900D2D963 /* UIImagePickerWrapper.swift */, F329953823919C0B00D2D963 /* UIImagePickerWrapper */,
); );
path = Views; path = Views;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
F329953823919C0B00D2D963 /* UIImagePickerWrapper */ = {
isa = PBXGroup;
children = (
F3299534239181A900D2D963 /* UIImagePickerWrapper.swift */,
F329953623919B6700D2D963 /* UIImagePickerWrapper+Coordinator.swift */,
);
path = UIImagePickerWrapper;
sourceTree = "<group>";
};
F3524241238F3F18009DF1F9 = { F3524241238F3F18009DF1F9 = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
@ -218,6 +229,7 @@
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
F3F566AF238F6556009E1FB0 /* ImageFilteringService.swift in Sources */, F3F566AF238F6556009E1FB0 /* ImageFilteringService.swift in Sources */,
F329953723919B6700D2D963 /* UIImagePickerWrapper+Coordinator.swift in Sources */,
F329952E23908BD400D2D963 /* ImageFilteringView.swift in Sources */, F329952E23908BD400D2D963 /* ImageFilteringView.swift in Sources */,
F32995322390C29100D2D963 /* ImageFilteringContainerView.swift in Sources */, F32995322390C29100D2D963 /* ImageFilteringContainerView.swift in Sources */,
F352424E238F3F18009DF1F9 /* AppDelegate.swift in Sources */, F352424E238F3F18009DF1F9 /* AppDelegate.swift in Sources */,

View File

@ -2,6 +2,6 @@
<Workspace <Workspace
version = "1.0"> version = "1.0">
<FileRef <FileRef
location = "self:Instafilter.xcodeproj"> location = "self:">
</FileRef> </FileRef>
</Workspace> </Workspace>

View File

@ -0,0 +1,43 @@
//
// UIImagePickerWrapper+Coordinator.swift
// Instafilter
//
// Created by CypherPoet on 11/29/19.
//
//
import Foundation
import UIKit
import SwiftUI
extension UIImagePickerWrapper {
class Coordinator: NSObject {
let onSelect: ((UIImage?) -> Void)
init(onSelect: @escaping ((UIImage?) -> Void)) {
self.onSelect = onSelect
}
}
}
// MARK: - UIImagePickerControllerDelegate
extension UIImagePickerWrapper.Coordinator: UIImagePickerControllerDelegate {
func imagePickerController(
_ picker: UIImagePickerController,
didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]
) {
let selectedImage = (info[.editedImage] ?? info[.originalImage]) as? UIImage
onSelect(selectedImage)
}
}
// MARK: - UINavigationControllerDelegate
extension UIImagePickerWrapper.Coordinator: UINavigationControllerDelegate {}

View File

@ -12,21 +12,31 @@ import SwiftUI
struct UIImagePickerWrapper { struct UIImagePickerWrapper {
typealias UIViewControllerType = UIImagePickerController typealias UIViewControllerType = UIImagePickerController
@Environment(\.presentationMode) var presentationMode
@Binding var selectedImage: UIImage?
} }
// MARK: - UIViewControllerRepresentable // MARK: - UIViewControllerRepresentable
extension UIImagePickerWrapper: UIViewControllerRepresentable { extension UIImagePickerWrapper: UIViewControllerRepresentable {
func makeCoordinator() -> UIImagePickerWrapper.Coordinator {
Self.Coordinator(onSelect: imageSelected)
}
func makeUIViewController( func makeUIViewController(
context: UIViewControllerRepresentableContext<UIImagePickerWrapper> context: UIViewControllerRepresentableContext<UIImagePickerWrapper>
) -> UIImagePickerController { ) -> UIImagePickerController {
UIImagePickerController() let picker = UIImagePickerController()
picker.delegate = context.coordinator
return picker
} }
func updateUIViewController( func updateUIViewController(
_ imagePickerController: UIImagePickerController, _ imagePickerController: UIImagePickerController,
context: UIViewControllerRepresentableContext<UIImagePickerWrapper> context: UIViewControllerRepresentableContext<UIImagePickerWrapper>
@ -36,12 +46,19 @@ extension UIImagePickerWrapper: UIViewControllerRepresentable {
} }
private extension UIImagePickerWrapper {
func imageSelected(_ image: UIImage?) {
selectedImage = image
presentationMode.wrappedValue.dismiss()
}
}
// MARK: - Preview // MARK: - Preview
struct UIImagePickerWrapper_Previews: PreviewProvider { //struct UIImagePickerWrapper_Previews: PreviewProvider {
//
static var previews: some View { // static var previews: some View {
UIImagePickerWrapper() // UIImagePickerWrapper()
} // }
} //}

View File

@ -30,7 +30,7 @@ extension ImageFilteringContainerView {
Spacer() Spacer()
} }
.sheet(isPresented: $isShowingImagePicker) { .sheet(isPresented: $isShowingImagePicker) {
UIImagePickerWrapper() UIImagePickerWrapper(selectedImage: self.$currentInputImage)
} }
} }
} }