Tocropviewcontroller: Exemple SwiftUI d'utilisation de TOCropViewController

Créé le 14 juil. 2020  ·  6Commentaires  ·  Source: TimOliver/TOCropViewController

Salut, existe-t-il un exemple SwiftUI d'utilisation de TOCropViewController ? Je viens de commencer à apprendre SwiftUI et je n'ai aucune expérience antérieure avec UIViewcontroller, cela m'aiderait donc à démarrer.

pr requested question

Commentaire le plus utile

Salut,
J'ai "interfacé" TOCropViewController pour SwiftUI. Je viens de commencer mon aventure de développement iOS, donc ce code n'est probablement pas parfait mais il fonctionne toujours et peut aider certaines personnes à démarrer avec ce référentiel et SwiftUI.

// FIle: ImageCropper.swift

import SwiftUI
import UIKit
import CropViewController

struct ImageCropper: UIViewControllerRepresentable{
  <strong i="7">@Binding</strong> var image: UIImage?
  <strong i="8">@Binding</strong> var visible: Bool
  var done: (UIImage) -> Void

  class Coordinator: NSObject, CropViewControllerDelegate{
    let parent: ImageCropper

    init(_ parent: ImageCropper){
      self.parent = parent
    }

    func cropViewController(_ cropViewController: CropViewController, didCropToImage image: UIImage, withRect cropRect: CGRect, angle: Int) {
      withAnimation{
        parent.visible = false
      }
      parent.done(image)
    }

    func cropViewController(_ cropViewController: CropViewController, didFinishCancelled cancelled: Bool) {
      withAnimation{
        parent.visible = false
      }
    }
  }

  func makeCoordinator() -> Coordinator {
    return Coordinator(self)
  }

  func updateUIViewController(_ uiViewController: UIViewControllerType, context: Context) {}

  func makeUIViewController(context: Context) -> some UIViewController {
    let img = self.image ?? UIImage()
    let cropViewController = CropViewController(image: img)
    cropViewController.delegate = context.coordinator
    return cropViewController
  }
}

Usage:

// FIle: SomeView.swift
import SwiftUI

struct SomeView: View {
  <strong i="12">@State</strong> private var showImageCropper = false
  <strong i="13">@State</strong> private var tempInputImage: UIImage?

  func imageCropped(image: UIImage){
    self.tempInputImage = nil
    self.pictures[self.pickedImageIndex] = Image(uiImage: image)
  }

  var body: some View {
    if showImageCropper {
      ImageCropper(image: self.$tempInputImage, visible: self.$showImageCropper, done: self.imageCropped)
        .zIndex(10)
    }
  }
}

Tous les 6 commentaires

Salut @ClaesClaes ! Oh wow! Bienvenue dans la communauté Swift alors !

Quelques personnes l'ont déjà demandé. Apple a publié quelques tutoriels qui, espérons-le, vont dans la bonne direction : https://developer.apple.com/tutorials/swiftui/interfacing-with-uikit

Malheureusement, je ne connais pas grand-chose à SwiftUI (je reste avec UIKit un peu plus longtemps. :) ), donc je ne peux malheureusement pas consacrer le temps à apprendre puis à écrire un exemple d'application pour le moment.

Je laisserai ce problème ouvert avec un statut « RP demandé » ci-joint. Si quelqu'un d'autre souhaite créer un échantillon SwiftUI et publier un PR pour celui-ci, ce serait très apprécié. :)

J'espère que ça aide !

Salut Tim,
Merci pour votre réponse. J'ai réussi à intégrer le TOCropViewController dans mon projet SwiftUI, donc il a (principalement) l'air bien pour le moment. Je peux poster du code + des instructions quand le temps le permet.
À votre santé,
Claes

Le 20 juillet 2020 à 14h37, Tim Oliver [email protected] a écrit :

Salut @ClaesClaes https://github.com/ClaesClaes ! Oh wow! Bienvenue dans la communauté Swift alors !

Quelques personnes l'ont déjà demandé. Apple a publié quelques tutoriels qui, espérons-le, vont dans la bonne direction : https://developer.apple.com/tutorials/swiftui/interfacing-with-uikit https://developer.apple.com/tutorials/swiftui/interfacing-with- uikit
Malheureusement, je ne connais pas grand-chose à SwiftUI (je reste avec UIKit un peu plus longtemps. :) ), donc je ne peux malheureusement pas consacrer le temps à apprendre puis à écrire un exemple d'application pour le moment.

Je laisserai ce problème ouvert avec un statut « RP demandé » ci-joint. Si quelqu'un d'autre souhaite créer un échantillon SwiftUI et publier un PR pour celui-ci, ce serait très apprécié. :)

-
Vous recevez ceci parce que vous avez été mentionné.
Répondez à cet e-mail directement, consultez-le sur GitHub https://github.com/TimOliver/TOCropViewController/issues/421#issuecomment-660858630 , ou désabonnez-vous https://github.com/notifications/unsubscribe-auth/ACOX6SWCSSAJWXCJ7KUWH2LR4PX2NWANCNFSM4

Salut @ClaesClaes !
J'ai créé un exemple d'application pour utiliser le « TOCropViewController » avec SwiftUI.

Avec l'utilisation de SwiftUI, je vois un problème où « TOCropViewController » ne peut pas être fermé à moins que vous n'attendiez 1 seconde lors de la transition de « UIImagePickerController » à « TOCropViewController ». Comment avez-vous résolu ce problème ?

  • Xcode 11.6 / iOS 13.6

Salut Kenji,
Je n'ai pas vu un tel retard dans ma mise en œuvre. Je ne suis pas en mesure de tester cela cette semaine, mais je peux le regarder plus tard.

Claes

Envoyé depuis mon téléphone. Toutes nos excuses pour la brièveté et les fautes d'orthographe

Le 25 juillet 2020, à 22h12, Kenji Wada [email protected] a écrit :


Salut @ClaesClaes !
J'ai créé un exemple d'application pour utiliser le « TOCropViewController » avec SwiftUI.

https://github.com/CH3COOH/TOCropViewController/tree/issue/421
Avec l'utilisation de SwiftUI, je vois un problème où « TOCropViewController » ne peut pas être fermé à moins que vous n'attendiez 1 seconde lors de la transition de « UIImagePickerController » à « TOCropViewController ». Comment avez-vous résolu ce problème ?

Xcode 11.6 / iOS 13.6
-
Vous recevez ceci parce que vous avez été mentionné.
Répondez directement à cet e-mail, consultez-le sur GitHub ou désabonnez-vous.

Salut,
J'ai "interfacé" TOCropViewController pour SwiftUI. Je viens de commencer mon aventure de développement iOS, donc ce code n'est probablement pas parfait mais il fonctionne toujours et peut aider certaines personnes à démarrer avec ce référentiel et SwiftUI.

// FIle: ImageCropper.swift

import SwiftUI
import UIKit
import CropViewController

struct ImageCropper: UIViewControllerRepresentable{
  <strong i="7">@Binding</strong> var image: UIImage?
  <strong i="8">@Binding</strong> var visible: Bool
  var done: (UIImage) -> Void

  class Coordinator: NSObject, CropViewControllerDelegate{
    let parent: ImageCropper

    init(_ parent: ImageCropper){
      self.parent = parent
    }

    func cropViewController(_ cropViewController: CropViewController, didCropToImage image: UIImage, withRect cropRect: CGRect, angle: Int) {
      withAnimation{
        parent.visible = false
      }
      parent.done(image)
    }

    func cropViewController(_ cropViewController: CropViewController, didFinishCancelled cancelled: Bool) {
      withAnimation{
        parent.visible = false
      }
    }
  }

  func makeCoordinator() -> Coordinator {
    return Coordinator(self)
  }

  func updateUIViewController(_ uiViewController: UIViewControllerType, context: Context) {}

  func makeUIViewController(context: Context) -> some UIViewController {
    let img = self.image ?? UIImage()
    let cropViewController = CropViewController(image: img)
    cropViewController.delegate = context.coordinator
    return cropViewController
  }
}

Usage:

// FIle: SomeView.swift
import SwiftUI

struct SomeView: View {
  <strong i="12">@State</strong> private var showImageCropper = false
  <strong i="13">@State</strong> private var tempInputImage: UIImage?

  func imageCropped(image: UIImage){
    self.tempInputImage = nil
    self.pictures[self.pickedImageIndex] = Image(uiImage: image)
  }

  var body: some View {
    if showImageCropper {
      ImageCropper(image: self.$tempInputImage, visible: self.$showImageCropper, done: self.imageCropped)
        .zIndex(10)
    }
  }
}

Salut,
J'ai "interfacé" TOCropViewController pour SwiftUI. Je viens de commencer mon aventure de développement iOS, donc ce code n'est probablement pas parfait mais il fonctionne toujours et peut aider certaines personnes à démarrer avec ce référentiel et SwiftUI.

// FIle: ImageCropper.swift

import SwiftUI
import UIKit
import CropViewController

struct ImageCropper: UIViewControllerRepresentable{
  <strong i="8">@Binding</strong> var image: UIImage?
  <strong i="9">@Binding</strong> var visible: Bool
  var done: (UIImage) -> Void

  class Coordinator: NSObject, CropViewControllerDelegate{
    let parent: ImageCropper

    init(_ parent: ImageCropper){
      self.parent = parent
    }

    func cropViewController(_ cropViewController: CropViewController, didCropToImage image: UIImage, withRect cropRect: CGRect, angle: Int) {
      withAnimation{
        parent.visible = false
      }
      parent.done(image)
    }

    func cropViewController(_ cropViewController: CropViewController, didFinishCancelled cancelled: Bool) {
      withAnimation{
        parent.visible = false
      }
    }
  }

  func makeCoordinator() -> Coordinator {
    return Coordinator(self)
  }

  func updateUIViewController(_ uiViewController: UIViewControllerType, context: Context) {}

  func makeUIViewController(context: Context) -> some UIViewController {
    let img = self.image ?? UIImage()
    let cropViewController = CropViewController(image: img)
    cropViewController.delegate = context.coordinator
    return cropViewController
  }
}

Usage:

// FIle: SomeView.swift
import SwiftUI

struct SomeView: View {
  <strong i="13">@State</strong> private var showImageCropper = false
  <strong i="14">@State</strong> private var tempInputImage: UIImage?

  func imageCropped(image: UIImage){
    self.tempInputImage = nil
    self.pictures[self.pickedImageIndex] = Image(uiImage: image)
  }

  var body: some View {
    if showImageCropper {
      ImageCropper(image: self.$tempInputImage, visible: self.$showImageCropper, done: self.imageCropped)
        .zIndex(10)
    }
  }
}

func cropViewController(_ cropViewController : CropViewController, didCropToImage image : UIImage, withRect cropRect : CGRect, angle : Int) {
parent.fait(image)

    // some how, there maybe a bug, it can not be dismissed except adding this
    DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) {
        withAnimation{
            self.parent.visible = false
        }
    }
}
Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

erickva picture erickva  ·  4Commentaires

TimOliver picture TimOliver  ·  4Commentaires

piyushlodaliya picture piyushlodaliya  ·  3Commentaires

felipebonezi picture felipebonezi  ·  6Commentaires

kcankaynak picture kcankaynak  ·  4Commentaires