Tocropviewcontroller: Exemplo de SwiftUI de uso de TOCropViewController

Criado em 14 jul. 2020  ·  6Comentários  ·  Fonte: TimOliver/TOCropViewController

Oi, há um exemplo de SwiftUI de usar TOCropViewController? Acabei de começar a aprender SwiftUI e não tenho nenhuma experiência anterior com UIViewcontroller, então me ajudaria a continuar.

pr requested question

Comentários muito úteis

Oi,
Eu "conectei" o TOCropViewController para SwiftUI. Acabei de começar minha aventura de desenvolvimento iOS, então este código provavelmente não é perfeito, mas ainda funciona e pode ajudar algumas pessoas a começar com este repo e 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
  }
}

Uso:

// 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)
    }
  }
}

Todos 6 comentários

Olá @ClaesClaes! Nossa! Bem-vindo à comunidade Swift então!

Algumas pessoas já perguntaram isso antes. A Apple lançou alguns tutoriais que, com sorte, apontam na direção certa: https://developer.apple.com/tutorials/swiftui/interfacing-with-uikit

Infelizmente, eu não sei muito sobre SwiftUI (ainda estou usando o UIKit por mais um pouco. :)), então, infelizmente, não posso dedicar meu tempo para aprender e escrever um aplicativo de amostra no momento.

Vou deixar este problema em aberto com o status "PR Solicitado" anexado. Se alguém mais quiser fazer uma amostra do SwiftUI e postar um PR, isso seria muito apreciado. :)

Espero que ajude!

Oi Tim,
Obrigado por sua resposta. Consegui integrar o TOCropViewController no meu projeto SwiftUI para que (principalmente) pareça bom por agora. Posso postar alguns códigos + instruções quando o tempo permitir.
Saúde,
Claes

Em 20 de julho de 2020, às 14h37, Tim Oliver [email protected] escreveu:

Olá @ClaesClaes https://github.com/ClaesClaes ! Nossa! Bem-vindo à comunidade Swift então!

Algumas pessoas já perguntaram isso antes. A Apple lançou alguns tutoriais que, com sorte, apontam na direção certa: https://developer.apple.com/tutorials/swiftui/interfacing-with-uikit https://developer.apple.com/tutorials/swiftui/interfacing-with- uikit
Infelizmente, eu não sei muito sobre SwiftUI (ainda estou usando o UIKit por mais um pouco. :)), então, infelizmente, não posso dedicar meu tempo para aprender e escrever um aplicativo de amostra no momento.

Vou deixar este problema em aberto com o status "PR Solicitado" anexado. Se alguém mais quiser fazer uma amostra do SwiftUI e postar um PR, isso seria muito apreciado. :)

-
Você está recebendo isso porque foi mencionado.
Responda a este e-mail diretamente, veja-o no GitHub https://github.com/TimOliver/TOCropViewController/issues/421#issuecomment-660858630 ou cancele a inscrição https://github.com/notifications/unsubscribe-auth/ACOX6SWCSSAJWXCJ7KUWH4LANCNANCNANCNANCNANCNV2 .

Olá, @ClaesClaes !
Eu criei um aplicativo de amostra para usar o 'TOCropViewController' com o SwiftUI.

Com o uso do SwiftUI, estou vendo um problema em que 'TOCropViewController' não pode ser fechado a menos que você espere 1 segundo ao fazer a transição de 'UIImagePickerController' para 'TOCropViewController'. Como você corrigiu esse problema?

  • Xcode 11.6 / iOS 13.6

Oi Kenji,
Não vi tanto atraso na minha implementação. Não posso testar isso esta semana, mas posso ver mais tarde.

Claes

Enviado do meu telefone. Desculpas pela brevidade e erros ortográficos

Em 25 de julho de 2020, às 22:12, Kenji Wada [email protected] escreveu:


Olá, @ClaesClaes !
Eu criei um aplicativo de amostra para usar o 'TOCropViewController' com o SwiftUI.

https://github.com/CH3COOH/TOCropViewController/tree/issue/421
Com o uso do SwiftUI, estou vendo um problema em que 'TOCropViewController' não pode ser fechado a menos que você espere 1 segundo ao fazer a transição de 'UIImagePickerController' para 'TOCropViewController'. Como você corrigiu esse problema?

Xcode 11.6 / iOS 13.6
-
Você está recebendo isso porque foi mencionado.
Responda a este e-mail diretamente, visualize-o no GitHub ou cancele a inscrição.

Oi,
Eu "conectei" o TOCropViewController para SwiftUI. Acabei de começar minha aventura de desenvolvimento iOS, então este código provavelmente não é perfeito, mas ainda funciona e pode ajudar algumas pessoas a começar com este repo e 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
  }
}

Uso:

// 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)
    }
  }
}

Oi,
Eu "conectei" o TOCropViewController para SwiftUI. Acabei de começar minha aventura de desenvolvimento iOS, então este código provavelmente não é perfeito, mas ainda funciona e pode ajudar algumas pessoas a começar com este repo e 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
  }
}

Uso:

// 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)
    }
  }
}

função cropViewController (_ cropViewController: CropViewController, didCropToImage image: UIImage, withRect cropRect: CGRect, ângulo: Int) {
parent.done (imagem)

    // 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
        }
    }
}
Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

muranobu picture muranobu  ·  4Comentários

agusguerra10 picture agusguerra10  ·  5Comentários

ojseven picture ojseven  ·  7Comentários

TimOliver picture TimOliver  ·  4Comentários

piyushlodaliya picture piyushlodaliya  ·  3Comentários