рдореИрдВ рддреЗрдЬреА рдХреЗ рд▓рд┐рдП рдХреНрд░реЙрдк рд╡реНрдпреВ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдХрд▓ рд╣реА рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореЗрд░рд╛ рдкреЙрдб рдЕрдк рдЯреВ рдбреЗрдЯ рд╣реИред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ, рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдЖрджрдореА рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрднрд╛рд╡рд┐рдд рд╕реНрдореГрддрд┐ рд░рд┐рд╕рд╛рд╡ рд╣реБрдЖ рд╣реИред
рдореИрдВ рд╕рд┐рд░реНрдл рдирдпрд╛ UIViewController рдмрдирд╛рддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВред рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рдирд┐рдпрдВрддреНрд░рдХ рдкрд░ UIImageView рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдЯреИрдк рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реИред рдореАрдбрд┐рдпрд╛ рдкрд┐рдХрд┐рдВрдЧ рдЦрддреНрдо рд╣реЛрдиреЗ рдкрд░ рдореИрдВ UIImagePickerController рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдХреНрд░реЙрдк рд╡реНрдпреВ рдХрдВрдЯреНрд░реЛрд▓рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВ;
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
if let selectedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
let cropVC = CropViewController(croppingStyle: .circular, image: selectedImage)
cropVC.delegate = self
picker.present(cropVC, animated: false, completion: nil)
}
}
рдЗрд╕ UIViewController рдХреЛ рдХреНрд░реЙрдк рдХрд░рдиреЗ рдФрд░ рдЦрд╛рд░рд┐рдЬ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, deinit
рдХрднреА рдХреЙрд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдЕрдЧрд░ рдореИрдВ рдЗрд╕ рддрд░рд╣ imagePickerController
рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╡рд┐рдзрд┐ рдмрджрд▓ рд░рд╣рд╛ рд╣реВрдБ;
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
if let selectedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
self.imageView.image = selectedImage
}
}
рддреЛ рдЕрдЧрд░ рдореИрдВ рдЦрд╛рд░рд┐рдЬ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ, deinit
рдХреЙрд▓ред рдореИрдВ рдпрд╣рд╛рдВ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдЖрдЗрдЯрдо рд╕реЗрдЯ рдирд╣реАрдВ рдХрд░рддрд╛, рдХреЗрд╡рд▓ UIViewController, UIImageView рдФрд░ UIImagePickerControllerред рдХреНрдпрд╛ рдореИрдВрдиреЗ рдХреБрдЫ рдЧрд▓рдд рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдпрд╛ рдпрд╣ рдПрдХ рд╕реНрдореГрддрд┐ рд░рд┐рд╕рд╛рд╡ рд╣реИ?
рдЬрдм рдореИрдВ рдЖрдкрдХреА CropViewController.swift
рдХрдХреНрд╖рд╛ рдореЗрдВ deinit
рдХреЙрд▓ рдХрд░рддрд╛ рд╣реВрдВ, рди рд╣реА рдЗрд╕реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╣рд╛рдп @kcankaynak!
рдЙрд╣ рдУрд╣ред рдЖрдк рд╕рд╣реА рд╣реЗред рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдореГрддрд┐ рд░рд┐рд╕рд╛рд╡ рдХреА рддрд░рд╣ рдЧрдВрдз рдХрд░рддрд╛ рд╣реИред рдореМрдХрд╛ рдорд┐рд▓рдиреЗ рдкрд░ рдореБрдЭреЗ рдЗрд╕реЗ рдирдореВрдирд╛ рдРрдк рдореЗрдВ рдЖрдЬрд╝рдорд╛рдирд╛ рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдореЗрд░реЗ UIViewController (рд╡рд╣ рдЬреЛ рдЖрдкрдХреА рдлрд╕рд▓ рд╡реАрд╕реА рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ) рдХреЛ рдЬрд╛рд░реА рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг рдПрдХ рд░рдЦрд░рдЦрд╛рд╡ рдЪрдХреНрд░ рд╣реИ, рдпрд╣ deinit рд╡рд┐рдзрд┐ рдХреЛ @kcankaynak рдХреЗ рд░реВрдк рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдпрд╣ рдЖрдкрдХрд╛ рдХреНрд░реЙрдкрд┐рдВрдЧрд╡реАрд╕реА рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХрдордЬреЛрд░ рдирд╣реАрдВ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЖрдкрдХреА рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╕рдВрдкрддреНрддрд┐ рдереА
public var delegate: CropViewControllerDelegate? {
didSet { self.setUpDelegateHandlers() }
}
рддреЛ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛.. рд╢рд╛рдпрдж
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХрдордЬреЛрд░ рд╡рд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐: CropViewControllerDelegate? {
рдбрд┐рдбрд╕реЗрдЯ {self.setUpDelegateHandlers ()}
}
рдЗрд╕реЗ рдареАрдХ рдХрд░ рджреЗрдЧрд╛ ... рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реБрдЖ :(
рдареАрдХ рд╣реИ .. рдореИрдВрдиреЗ рдЗрд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд╕рд╛рде рддрдп рдХрд┐рдпрд╛ рд╣реИ:
1- рдореИрдВрдиреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рдХрдордЬреЛрд░ рдмрдирд╛ рджрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╣рдореЗрд╢рд╛ рдХрдордЬреЛрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
2- рдореИрдВрдиреЗ [рдХрдордЬреЛрд░ рд╕реНрд╡рдпрдВ] рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓рд░ рдХреЗ рдЕрдВрджрд░ рд╕реНрд╡рдпрдВ рдХреЙрд▓ рдХрд┐рдпрд╛
рдЕрдкрдиреЗ CropViewController.swift рдореЗрдВ onDid... рдХреЙрд▓рдмреИрдХ рджреЗрдЦреЗрдВред
fileprivate func setUpDelegateHandlers() {
guard let delegate = self.delegate else {
onDidCropToRect = nil
onDidCropImageToRect = nil
onDidCropToCircleImage = nil
onDidFinishCancelled = nil
return
}
if delegate.responds(to: #selector(CropViewControllerDelegate.cropViewController(_:didCropImageToRect:angle:))) {
self.onDidCropImageToRect = {[weak self] rect, angle in
delegate.cropViewController!((self)!, didCropImageToRect: rect, angle: angle)
}
}
if delegate.responds(to: #selector(CropViewControllerDelegate.cropViewController(_:didCropToImage:withRect:angle:))) {
self.onDidCropToRect = {[weak self] image, rect, angle in
delegate.cropViewController!((self)!, didCropToImage: image, withRect: rect, angle: angle)
}
}
if delegate.responds(to: #selector(CropViewControllerDelegate.cropViewController(_:didCropToCircularImage:withRect:angle:))) {
self.onDidCropToCircleImage = {[weak self] image, rect, angle in
delegate.cropViewController!((self)!, didCropToCircularImage: image, withRect: rect, angle: angle)
}
}
if delegate.responds(to: #selector(CropViewControllerDelegate.cropViewController(_:didFinishCancelled:))) {
self.onDidFinishCancelled = { [weak self] finished in
delegate.cropViewController!((self)!, didFinishCancelled: finished)
}
}
}
рдЗрд╕реЗ рджреВрд╕рд░реЗ рдкреАрдЖрд░ рдореЗрдВ рдорд┐рд▓рд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЙрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдареАрдХ рд╣реИ .. рдореИрдВрдиреЗ рдЗрд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд╕рд╛рде рддрдп рдХрд┐рдпрд╛ рд╣реИ:
1- рдореИрдВрдиреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рдХрдордЬреЛрд░ рдмрдирд╛ рджрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╣рдореЗрд╢рд╛ рдХрдордЬреЛрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
2- рдореИрдВрдиреЗ [рдХрдордЬреЛрд░ рд╕реНрд╡рдпрдВ] рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓рд░ рдХреЗ рдЕрдВрджрд░ рд╕реНрд╡рдпрдВ рдХреЙрд▓ рдХрд┐рдпрд╛
рдЕрдкрдиреЗ CropViewController.swift рдореЗрдВ onDid... рдХреЙрд▓рдмреИрдХ рджреЗрдЦреЗрдВред