কীভাবে ব্যবহারকারীকে সুইফ্টের সাহায্যে চিত্রটি বাছতে দেওয়া যায়?


89

আমি সুইফট সহ আমার প্রথম আইওএস অ্যাপ্লিকেশন (কেবল আইফোন) লিখছি। প্রধান অ্যাপ্লিকেশন দর্শনটি ব্যবহারকারীদের ফটো গ্যালারী থেকে চিত্রটি চয়ন করতে দেয়।

আমি ViewController.swift এর নিম্নলিখিত নমুনা কোডটি পেয়েছি :

class ViewController: UIImagePickerController, UINavigationControllerDelegate, UIImagePickerControllerDelegate  {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {

        var imagePickerController = UIImagePickerController()
        imagePickerController.delegate = self
        imagePickerController.sourceType = UIImagePickerControllerSourceType.SavedPhotosAlbum
        imagePickerController.allowsEditing = true
        self.presentViewController(imagePickerController, animated: true, completion: { imageP in

        })
    }


    func imagePickerController(picker: UIImagePickerController!, didFinishPickingImage image: UIImage!, editingInfo: NSDictionary!) {
        let selectedImage : UIImage = image
        println(selectedImage)
    }

}

এবং নিম্নলিখিত দেখুন নিয়ামক দৃশ্য দেখুন -

View Controller
 - Top Layout Guide
 - Bottom Layout Guide
 - View
   - Image View
First Responder
Exit

তবে আমি যখন অ্যাপটি শুরু করি তখন কেবল কালো পর্দা প্রদর্শিত হয় shown আমি কী ভুল করছি? আরেকটি নমুনা কোড আমি পেয়েছি উদ্দেশ্য সি, যা আমার সাহায্য না হয়।


একটি সমস্যা হ'ল ডায়সলেটগ্রাউট ইন্ডিপথ হ'ল ইউআইটিএবল ভিউডেলিগেটের প্রতিনিধি কল। আপনার দৃশ্যের লেআউট এবং আপনার কোড অনুসারে এখানে কোনও সারণীদর্শন ব্যবহৃত হচ্ছে না এবং আপনার ভিউকন্ট্রোলারটি কোনও ইউআইটিএবলভিউডেলিগেট নয়। হতে পারে একটি ফাঁকা প্রকল্প কাজ শুরু করবে যা কাজ করে এবং একটি বোতাম যুক্ত করবে এবং বোতাম টিপুন থেকে আপনার কোডটি ফায়ার করবে।
মাইকেল ওয়াইল্ডমারথ

@ এলএল_ আমি বুঝতে পারছি না কেন এখানে টেবিলভিউয়ের কার্যাদি জড়িত?
ডেকেল মামান

: এটা কাজ করছে এবং কূপের শুধু যেতে পরীক্ষিত stackoverflow.com/questions/41717115/...
Mr.Javed Multani

দয়া করে এটিকে দেখুন, theswiftdev.com/…
অ্যান্ড্রুজ

উত্তর:


132

আপনি যদি কেবল ইউআইআইজেজপিকার কনট্রোলার দিয়ে এই চিত্রটি ব্যবহারকারীকে চিত্র চয়ন করতে চান:

import UIKit


class ViewController: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate {

    @IBOutlet var imageView: UIImageView!
    @IBOutlet var chooseBuuton: UIButton!
    var imagePicker = UIImagePickerController()

    @IBAction func btnClicked() {

        if UIImagePickerController.isSourceTypeAvailable(.savedPhotosAlbum){
            print("Button capture")

            imagePicker.delegate = self
            imagePicker.sourceType = .savedPhotosAlbum
            imagePicker.allowsEditing = false

            present(imagePicker, animated: true, completion: nil)
        }
    }

    func imagePickerController(picker: UIImagePickerController!, didFinishPickingImage image: UIImage!, editingInfo: NSDictionary!){
        self.dismiss(animated: true, completion: { () -> Void in

        })

        imageView.image = image
    }
}

আমি কী চাই না যদি ব্যবহারকারী বাটনটি টিপতে ইমেজটি চয়ন করতে চান?
এলএ_

ফিনক থেকে @ আইব্যাকশনটি সরিয়ে ফেলুন এবং ফানকে ফোন করুন যখনই আপনি ভিউডিলডেডে বলতে চান বা যে কোনও সময় আপনি কেবল এটি কল করতে চান
ডেকেল মামান ২

ধন্যবাদ এটা বলে Attempt to present <UIImagePickerController: 0x7fdb84029800> on <MyApp.ViewController: 0x7fdb838360a0> whose view is not in the window hierarchy!। আমার কি দৃশ্যে কিছু যুক্ত করা উচিত?
এলএ_

4
আমি বিসি upvated এটি সত্যিই সহায়ক ছিল। সবেমাত্র এনএসডেটরিয়াকে [এনএসওজেক্ট: যেকোনওবজেক্ট] এ পরিবর্তন করতে হয়েছিল এবং দুর্দান্ত কাজ করে!
scubasteve623

@ ডেকেলমানকে এটিকে সুইফট 3 তৈরি করার জন্য পর্যালোচনা কাতারে একটি প্রস্তাবিত সম্পাদনা ছিল, তবে এটি নিম্নমানের ছিল , তাই আমি এটিকে প্রত্যাখ্যান করেছি এবং আরও পরামর্শ এড়াতে একটি উপযুক্ত সম্পাদনা করেছি
Cœur

80

@ ব্যবহারকারী3182143 উত্তরের উপর ভিত্তি করে সুইফট 4 এর জন্য কপিরাইট-পেস্ট ওয়ার্কিং ইমেজ চয়নকারী সম্পূর্ণ করুন:

import Foundation
import UIKit


class ImagePickerManager: NSObject, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

    var picker = UIImagePickerController();
    var alert = UIAlertController(title: "Choose Image", message: nil, preferredStyle: .actionSheet)
    var viewController: UIViewController?
    var pickImageCallback : ((UIImage) -> ())?;
    
    override init(){
        super.init()
        let cameraAction = UIAlertAction(title: "Camera", style: .default){
            UIAlertAction in
            self.openCamera()
        }
        let galleryAction = UIAlertAction(title: "Gallery", style: .default){
            UIAlertAction in
            self.openGallery()
        }
        let cancelAction = UIAlertAction(title: "Cancel", style: .cancel){
            UIAlertAction in
        }

        // Add the actions
        picker.delegate = self
        alert.addAction(cameraAction)
        alert.addAction(galleryAction)
        alert.addAction(cancelAction)
    }

    func pickImage(_ viewController: UIViewController, _ callback: @escaping ((UIImage) -> ())) {
        pickImageCallback = callback;
        self.viewController = viewController;

        alert.popoverPresentationController?.sourceView = self.viewController!.view

        viewController.present(alert, animated: true, completion: nil)
    }
    func openCamera(){
        alert.dismiss(animated: true, completion: nil)
        if(UIImagePickerController .isSourceTypeAvailable(.camera)){
            picker.sourceType = .camera
            self.viewController!.present(picker, animated: true, completion: nil)
        } else {
            let alertWarning = UIAlertView(title:"Warning", message: "You don't have camera", delegate:nil, cancelButtonTitle:"OK", otherButtonTitles:"")
            alertWarning.show()
        }
    }
    func openGallery(){
        alert.dismiss(animated: true, completion: nil)
        picker.sourceType = .photoLibrary
        self.viewController!.present(picker, animated: true, completion: nil)
    }

    
    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        picker.dismiss(animated: true, completion: nil)
    }
    //for swift below 4.2
    //func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    //    picker.dismiss(animated: true, completion: nil)
    //    let image = info[UIImagePickerControllerOriginalImage] as! UIImage
    //    pickImageCallback?(image)
    //}
    
    // For Swift 4.2+
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        picker.dismiss(animated: true, completion: nil)
        guard let image = info[.originalImage] as? UIImage else {
            fatalError("Expected a dictionary containing an image, but was provided the following: \(info)")
        }
        pickImageCallback?(image)
    }



    @objc func imagePickerController(_ picker: UIImagePickerController, pickedImage: UIImage?) {
    }

}

আপনার ভিউকন্ট্রোলার থেকে এটি কল করুন:

    ImagePickerManager().pickImage(self){ image in
        //here is the image
    }

নিম্নলিখিত কীগুলি আপনার অন্তর্ভুক্ত করতে ভুলবেন না info.plist:

<key>NSCameraUsageDescription</key>
<string>This app requires access to the camera.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>This app requires access to the photo library.</string>

4
imagePickerControllerএটি কাজ করতে ফানকে এর সাথে প্রতিস্থাপন করতে হয়েছিল । ধন্যবাদ! func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { let image = info[UIImagePickerController.InfoKey.originalImage] as! UIImage pickImageCallback?(image) picker.dismiss(animated: true, completion: nil) }
তুম

4
'NSInternInconsistencyException', কারণ: 'ইউআইএলআরল্টকন্ট্রোলারের কেবল একটি স্টাইলের সাথে ইউআইএলআর্টএকশন স্টাইলক্যান্সেল থাকতে পারে' উপরের কোড সহ আমি এই ত্রুটিটি পাই get
PaFi

আমি সমস্যাটি সমাধানের জন্য নিম্নলিখিত কোডটি যুক্ত করেছি: অ্যালার্ট.অ্যাকশনস অ্যাকাউন্ট> 0 {// সতর্কতা সেলফ.প্রিসেন্ট বাতিল করার পরে আবার আহ্বান করা হয়েছে (সতর্কতা, অ্যানিমেটেড: সত্য, সমাপ্তি: শূন্য)} অন্য {সতর্কতা.এডিএডএশন (ক্যামেরাএ্যাকশন) সতর্কতা .addAction (গ্যালারীঅ্যাকশন) এলার্ট.এডএডএকশন (বাতিলঅ্যাকশন) সেল্ফ.প্রিসেন্ট (সতর্কতা, অ্যানিমেটেড: সত্য, সমাপ্তি: শূন্য)
Ing

4
@ Ing.Ron এডঅ্যাকশনগুলি একবারে সেট করা দরকার, সুতরাং তাদের পরিবর্তে সূচনা পদ্ধতিতে বসতে হবে - আমি কোডটি আপডেট করেছি। আপনি যদি এতে কোনও সমস্যা পান তবে আমাকে জানান
আমাদের

@ ভাইয়ার: আপনার দ্রুত প্রতিক্রিয়ার জন্য অনেক ধন্যবাদ! আমার ক্ষেত্রে আমি আপনার init () কোডটি ভিউডিডলয়েডে রেখেছি () যা আমার পক্ষে ভাল কাজ করে!
ইনগ। রন

39

সুইফট 3 এর জন্য:

  1. প্রথমত, আপনাকে তথ্য.পলিতে নিম্নলিখিত কীটি যুক্ত করতে হবে:

        <key>NSPhotoLibraryUsageDescription</key>
    <string>This app requires access to the photo library.</string>
    
  2. আপনার ভিউ কন্ট্রোলারের নিম্নলিখিত প্রোটোকলের সাথে সামঞ্জস্য করা দরকার: UIImagePickerControllerDelegate, UINavigationControllerDelegate:

    class ImagePickerViewController:  UIViewController,UIImagePickerControllerDelegate, UINavigationControllerDelegate {}
    
  3. আপনাকে ইউআইআইজেজ ঘোষণা করতে হবে আপনি প্রত্যাবর্তিত / নির্বাচিত চিত্রটিকে আবদ্ধ করতে ব্যবহার করবেন:

    @IBOutlet weak var myImageView: UIImageView!
    @IBoutlet weak var upLoadImageBtn:UIImage!
    let imagePicker = UIImagePickerController()
    
  4. আপনার ভিউকন্ট্রোলার হতে পিকরআইমেজ প্রতিনিধি সেট করুন:

    imagePicker.delegate = self
    
  5. আপলোড বোতামটির জন্য, ক্রিয়াটি ফায়ার করতে এবং চিত্র চয়নকারীটি প্রদর্শনের জন্য আপনাকে নীচের চিত্রটির সাথে লিঙ্ক করতে হবে:

    @IBAction func upLoadImageBtnPressed(_ sender: AnyObject) {
        imagePicker.allowsEditing = false
        imagePicker.sourceType = .photoLibrary
    
    
        /*
        The sourceType property wants a value of the enum named        UIImagePickerControllerSourceType, which gives 3 options:
    
        UIImagePickerControllerSourceType.PhotoLibrary
        UIImagePickerControllerSourceType.Camera
        UIImagePickerControllerSourceType.SavedPhotosAlbum
    
        */
        present(imagePicker, animated: true, completion: nil)
    
    }
    
  6. আপনার দর্শন নিয়ামককে চিত্র চয়নকারী প্রতিনিধিদের জন্য প্রতিনিধি পদ্ধতিগুলি প্রয়োগ করতে হবে:

    // MARK: - ImagePicker Delegate
    
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    
        if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
            myImageView.contentMode = .scaleAspectFit
            myImageView.image = pickedImage
        }
    
    
        /*
    
        Swift Dictionary named “info”.  
        We have to unpack it from there with a key asking for what media information we want.
        We just want the image, so that is what we ask for.  For reference, the available options are:
    
        UIImagePickerControllerMediaType
        UIImagePickerControllerOriginalImage
        UIImagePickerControllerEditedImage
        UIImagePickerControllerCropRect
        UIImagePickerControllerMediaURL
        UIImagePickerControllerReferenceURL
        UIImagePickerControllerMediaMetadata
    
        */
        dismiss(animated: true, completion: nil)
    }
    
    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        dismiss(animated: true, completion:nil)
    }
    

13

ছবিটি বাছাই করার জন্য আমি আপনাকে সেরা বোধগম্য কোডিং দেব, এটি উল্লেখ করুন

func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) 
{
     var alert:UIAlertController=UIAlertController(title: "Choose Image", message: nil, preferredStyle: UIAlertControllerStyle.ActionSheet)
     var cameraAction = UIAlertAction(title: "Camera", style: UIAlertActionStyle.Default)
     {
        UIAlertAction in
        self.openCamera()
     }
     var gallaryAction = UIAlertAction(title: "Gallary", style: UIAlertActionStyle.Default)
     {
        UIAlertAction in
        self.openGallary()
     }
     var cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel)
     {
        UIAlertAction in
     }

    // Add the actions
     picker?.delegate = self
     alert.addAction(cameraAction)
     alert.addAction(gallaryAction)
     alert.addAction(cancelAction)
     self.presentViewController(alert, animated: true, completion: nil)
}
func openCamera()
{
    if(UIImagePickerController .isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera))
    {
        picker!.sourceType = UIImagePickerControllerSourceType.Camera
        self .presentViewController(picker!, animated: true, completion: nil)
    }
    else
    {
        let alertWarning = UIAlertView(title:"Warning", message: "You don't have camera", delegate:nil, cancelButtonTitle:"OK", otherButtonTitles:"")
        alertWarning.show()
    }
}
func openGallary()
{
    picker!.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
    self.presentViewController(picker!, animated: true, completion: nil)
}

//PickerView Delegate Methods
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject])
{
    picker .dismissViewControllerAnimated(true, completion: nil)
    imageView.image=info[UIImagePickerControllerOriginalImage] as? UIImage
}
func imagePickerControllerDidCancel(picker: UIImagePickerController)
{
    println("picker cancel.")
}

আপনার দিনটি শুভ হোক:-)


8
    @IBAction func chooseProfilePicBtnClicked(sender: AnyObject) {
    let alert:UIAlertController=UIAlertController(title: "Choose Image", message: nil, preferredStyle: UIAlertControllerStyle.ActionSheet)
    let cameraAction = UIAlertAction(title: "Camera", style: UIAlertActionStyle.Default)
        {
            UIAlertAction in
            self.openCamera()
    }
    let gallaryAction = UIAlertAction(title: "Gallary", style: UIAlertActionStyle.Default)
        {
            UIAlertAction in
            self.openGallary()
    }
    let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel)
        {
            UIAlertAction in
    }

    // Add the actions
    picker.delegate = self
    alert.addAction(cameraAction)
    alert.addAction(gallaryAction)
    alert.addAction(cancelAction)
    self.presentViewController(alert, animated: true, completion: nil)
}
func openCamera(){
    if(UIImagePickerController .isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera)){
        picker.sourceType = UIImagePickerControllerSourceType.Camera
        self .presentViewController(picker, animated: true, completion: nil)
    }else{
        let alert = UIAlertView()
        alert.title = "Warning"
        alert.message = "You don't have camera"
        alert.addButtonWithTitle("OK")
        alert.show()
    }
}
func openGallary(){
    picker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
    self.presentViewController(picker, animated: true, completion: nil)
}
//MARK:UIImagePickerControllerDelegate
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]){
    picker .dismissViewControllerAnimated(true, completion: nil)
    imageViewRef.image=info[UIImagePickerControllerOriginalImage] as? UIImage
}
func imagePickerControllerDidCancel(picker: UIImagePickerController){
    print("picker cancel.")
}

7

সুইফ্ট 5 এ আপনাকে এটি করতে হবে

class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

    @IBOutlet var imageView: UIImageView!
    var imagePicker = UIImagePickerController()

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

    @IBAction func setPicture(_ sender: Any) {
        if UIImagePickerController.isSourceTypeAvailable(.photoLibrary){
            imagePicker.delegate = self
            imagePicker.sourceType = .photoLibrary
            imagePicker.allowsEditing = false

            present(imagePicker, animated: true, completion: nil)
        }
    }

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        picker.dismiss(animated: true, completion: nil)
        if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
            imageView.image = image
        }

    }




}

5

এক্সকোড 10.1 / সুইফট 4.2:

  1. প্রয়োজনীয় অনুমতি যুক্ত করুন (অন্যদের উল্লিখিত)

  2. আপনার দর্শনে এই শ্রেণিটি যুক্ত করুন:


    import UIKit

    import Photos

    import Foundation

class UploadImageViewController: UIViewController, UIImagePickerControllerDelegate , UINavigationControllerDelegate {

        @IBOutlet weak var imgView: UIImageView!

        let imagePicker = UIImagePickerController()

        override func viewDidLoad() {

            super.viewDidLoad()

            checkPermission()

            imagePicker.delegate = self
            imagePicker.allowsEditing = false
            imagePicker.sourceType = .photoLibrary
        }

        @IBAction func btnSetProfileImageClickedCamera(_ sender: UIButton) {
        }

        @IBAction func btnSetProfileImageClickedFromGallery(_ sender: UIButton) {
            self.selectPhotoFromGallery()
        }

        func selectPhotoFromGallery() {
            self.present(imagePicker, animated: true, completion: nil)
        }

        func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {

            if let pickedImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
                    self.imgView.contentMode = .scaleAspectFit
                    self.imgView.image = pickedImage
                }

            dismiss(animated: true, completion: nil)
        }


        func imagePickerControllerDidCancel(_ picker: UIImagePickerController){
            print("cancel is clicked")
        }


        func checkPermission() {
            let photoAuthorizationStatus = PHPhotoLibrary.authorizationStatus()
            switch photoAuthorizationStatus {
            case .authorized:
                print("Access is granted by user")
            case .notDetermined:
                PHPhotoLibrary.requestAuthorization({
                    (newStatus) in
                    print("status is \(newStatus)")
                    if newStatus ==  PHAuthorizationStatus.authorized {
                        /* do stuff here */
                        print("success")
                    }
                })
                print("It is not determined until now")
            case .restricted:
                // same same
                print("User do not have access to photo album.")
            case .denied:
                // same same
                print("User has denied the permission.")
            }
        }
    }

3

ফটো লাইব্রেরি চিত্রগুলি সুইফ্ট কোডিং প্রদর্শনের জন্য এই জিনিসগুলি করুন:

var pkcrviewUI = UIImagePickerController()
        if UIImagePickerController .isSourceTypeAvailable(UIImagePickerControllerSourceType.PhotoLibrary)
        {
            pkcrviewUI.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
            pkcrviewUI.allowsEditing = true
            pkcrviewUI.delegate = self
            [self .presentViewController(pkcrviewUI, animated: true , completion: nil)]
        }

3

আমি জানি এটি প্রশ্নটি এক বছরের পুরনো, তবে এখানে বেশ কয়েকটি সহজ সরল কোড (বেশিরভাগ এই টিউটোরিয়ালটি থেকে ) আমার জন্য ভালভাবে কাজ করছে:

import UIKit

class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

@IBOutlet weak var imageView: UIImageView!

var imagePicker = UIImagePickerController()

override func viewDidLoad() {
    super.viewDidLoad()

    self.imagePicker.delegate = self
}

@IBAction func loadImageButtonTapped(sender: AnyObject) {
    print("hey!")
    self.imagePicker.allowsEditing = false
    self.imagePicker.sourceType = .SavedPhotosAlbum

    self.presentViewController(imagePicker, animated: true, completion: nil)
}

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {
    if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
        self.imageView.contentMode = .ScaleAspectFit
        self.imageView.image = pickedImage
    }

    dismissViewControllerAnimated(true, completion: nil)

}

func imagePickerControllerDidCancel(picker: UIImagePickerController) {
    self.imagePicker = UIImagePickerController()
    dismissViewControllerAnimated(true, completion: nil)
}

আমি যে রেফারেন্স করেছি তার চেয়ে গভীরতর টিউটোরিয়ালটি এখানে
রাচেল হার্ভে

3

সুইফট 4 এর জন্য
এই কোডটি আমার পক্ষে কাজ করছে!

import UIKit


class ViewController: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate {

    @IBOutlet var imageView: UIImageView!
    @IBOutlet var chooseBuuton: UIButton!
    var imagePicker = UIImagePickerController()

    override func viewDidLoad() {
        super.viewDidLoad()
        imagePicker.delegate = self
    }
    @IBAction func btnClicked() {

    if UIImagePickerController.isSourceTypeAvailable(.savedPhotosAlbum) 
    {
        print("Button capture")
        imagePicker.sourceType = .savedPhotosAlbum;
        imagePicker.allowsEditing = false

        self.present(imagePicker, animated: true, completion: nil)
        }
    }

  @objc func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    let chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage
    imageView.image = chosenImage

    dismiss(animated: true, completion: nil)
    }
}

2

অবশ্যই, উপরের উত্তরগুলি মূল সমস্যাটি সমাধান করে।

ফটো অ্যালবামটি চালু করার সময় আমি সুইফট 3.0.০ এ বিপর্যয়ের মুখোমুখি হয়েছিলাম কারণ তথ্য.প্লেস্টে এই পতাকাগুলি ছিল না:

  1. গোপনীয়তা - ফটো গ্রন্থাগারের ব্যবহারের বিবরণ -> এনএসপি ফটো লাইব্রেরি ইউজেজ বিবরণ

  2. গোপনীয়তা - ক্যামেরার ব্যবহারের বিবরণ -> এনএস ক্যামেরা ইউজেজ বিবরণ

[স্ক্রিনশট [1]

আপনি যদি অনুরূপ সমস্যার মুখোমুখি হন তবে এগুলি যুক্ত করুন।

ধন্যবাদ!


1

এটি করার সহজ উপায় এখানে:

তবে প্রথমে আপনাকে তথ্য.পুলিস্টে (গোপনীয়তা - ফটো লাইব্রেরি ব্যবহারের বিবরণ) যুক্ত করতে হবে এবং আপনার ভিউ কন্ট্রোলারটিতে আপনার একটি বোতাম এবং একটি ইউআইআইমেজভিউ থাকা উচিত।

তারপরে ইউআইআইমেজভিউয়ের একটি আউটলেট তৈরি করুন (এই কোডটিতে আউটলেটটিকে মাই আইমেজ বলা হয়) এবং বোতামটির একটি ক্রিয়া (আমি আমার কোডটিতে ক্রিয়াকলাপটি আমদানি বলেছি)

import UIKit
class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

    }
    @IBOutlet weak var myImage: UIImageView!
    @IBAction func importing(_ sender: Any) {
        let Picker = UIImagePickerController()
        Picker.delegate = self
        Picker.sourceType = .photoLibrary
        self.present(Picker, animated: true, completion: nil)
        Picker.allowsEditing = true
        Picker.mediaTypes = UIImagePickerController.availableMediaTypes(for: .photoLibrary)!
    }

     func imagePickerController(_ picker: UIImagePickerController,didFinishPickingMediaWithInfo info: [String : Any])
    {
        let chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage //1
        myImage.contentMode = .scaleAspectFit //2
        myImage.image = chosenImage //3
        dismiss(animated:true, completion: nil) //4
    }

}

0

যদি আপনি একটি আলাদা বোতাম না রাখতে চান তবে এটি অন্য একটি উপায়। ইমেজভিউতে নিজেই একটি অঙ্গভঙ্গি সংযুক্ত করেছেন, যেখানে চিত্রের আলতো চাপলে একটি সতর্কতা দুটি বিকল্পের সাথে পপআপ করবে। গ্যালারী / ফটো লাইব্রেরি থেকে বেছে নিতে বা সতর্কতাটি বাতিল করতে আপনার বিকল্প থাকবে।

import UIKit
import CoreData

class AddDetailsViewController: UIViewController, UITextFieldDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

@IBOutlet weak var imageView: UIImageView!

var picker:UIImagePickerController? = UIImagePickerController()

@IBAction func saveButton(sender: AnyObject) {
    let managedContext = (UIApplication.sharedApplication().delegate as? AppDelegate)!.managedObjectContext

    let entity = NSEntityDescription.entityForName("Person", inManagedObjectContext: managedContext)

    let person = Person(entity: entity!, insertIntoManagedObjectContext: managedContext)

    person.image = UIImageJPEGRepresentation(imageView.image!, 1.0) //imageView.image

    do {
         try person.managedObjectContext?.save()
         //people.append(person)
       } catch let error as NSError {
         print("Could not save \(error)")
    }
}

override func viewDidLoad() {
    super.viewDidLoad()
    let tapGesture = UITapGestureRecognizer(target: self, action: #selector(AddDetailsViewController.tapGesture(_:)))
    imageView.addGestureRecognizer(tapGesture)
    imageView.userInteractionEnabled = true

    picker?.delegate = self
    // Do any additional setup after loading the view.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func tapGesture(gesture: UIGestureRecognizer) {
    let alert:UIAlertController = UIAlertController(title: "Profile Picture Options", message: nil, preferredStyle: UIAlertControllerStyle.ActionSheet)

    let gallaryAction = UIAlertAction(title: "Open Gallary", style: UIAlertActionStyle.Default) {
        UIAlertAction in self.openGallary()
    }

    let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel) {
        UIAlertAction in self.cancel()
    }

    alert.addAction(gallaryAction)
    alert.addAction(cancelAction)

    self.presentViewController(alert, animated: true, completion: nil)

}


func openGallary() {
    picker!.allowsEditing = false
    picker!.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
    presentViewController(picker!, animated: true, completion: nil)
}

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
    if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
        imageView.contentMode = .ScaleAspectFit
        imageView.image = pickedImage
    }

    dismissViewControllerAnimated(true, completion: nil)
}

func cancel(){
    print("Cancel Clicked")
}

}

প্রশ্নটিতে আরও যুক্ত করে, কোরেডাটাতে চিত্রগুলি সংরক্ষণ করার জন্য যুক্তি প্রয়োগ করে।


0

বাটনে ক্লিক করুন এবং চিত্র গ্যালারী খুলুন এবং চিত্রের ভিউ সুইচ 3.0 এ চিত্র স্থাপন করুন

তিনটি প্রতিনিধি যুক্ত করুন

var picker:UIImagePickerController?=UIImagePickerController()
@IBOutlet var imgPhoto: UIImageView!

   override func viewDidLoad() {
    super.viewDidLoad()
    picker?.delegate=self
   }

 @IBAction func btnAddPhotoClicked(_ sender: UIButton) {
    openGallary()
   }

func openGallary()
{
    picker!.allowsEditing = false
    picker!.sourceType = UIImagePickerControllerSourceType.photoLibrary
    present(picker!, animated: true, completion: nil)
}

//MARK:- ImagePicker Controller Delegate
//MARK:-

func imagePickerControllerDidCancel(_ picker: 
UIImagePickerController) {
    dismiss(animated: true, completion: nil)
}

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    if let chosenImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
        imgPhoto.contentMode = .scaleToFill
        imgPhoto.image = chosenImage
    } else{
        print("Something went wrong")
    }

    self.dismiss(animated: true, completion: nil)
}

0

এখানে উল্লেখ করার জন্য কেবল উত্তর দেওয়া: info[UIImagePickerControllerEditedImage]আপনি সম্ভবত বেশিরভাগ ক্ষেত্রেই এটি ব্যবহার করতে চান।

তা ছাড়া, এখানে উত্তরগুলি ব্যাপক।


0

এটি সহজ চেষ্টা করে দেখুন .. ইউআইআইমেজপিকার কনট্রোলারডেলিগেট ব্যবহার করে একটি চিত্র পিক করতে

    @objc func masterAction(_ sender: UIButton)
    {
        if UIImagePickerController.isSourceTypeAvailable(.savedPhotosAlbum){
            print("Button capture")

            imagePicker.delegate = self
            imagePicker.sourceType = .savedPhotosAlbum;
            imagePicker.allowsEditing = false

            self.present(imagePicker, animated: true, completion: nil)
        }

        print("hello i'm touch \(sender.tag)")
    }

    func imagePickerControllerDidCancel(_ picker:
        UIImagePickerController) {
        dismiss(animated: true, completion: nil)
    }

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        if let chosenImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
            print("Get Image \(chosenImage)")
            ImageList.insert(chosenImage, at: 0)
            ArrayList.insert("", at: 0)
            Collection_Vw.reloadData()
        } else{
            print("Something went wrong")
        }

        self.dismiss(animated: true, completion: nil)
    }

0

আপনি যদি কেবলমাত্র সাধারণ চিত্র বাছাই করতে চান তবে নীচের কোডটি ব্যবহার করতে পারেন, তা যাচাই করা চিত্রটি প্যানোরামা চিত্র নয়।

let picker = UIImagePickerController()

func photoFromLibrary() {

        self.picker.allowsEditing = true
        self.picker.sourceType = .photoLibrary
        //picker.mediaTypes = UIImagePickerController.availableMediaTypes(for: .photoLibrary)!

        self.present(self.picker, animated: true, completion: nil)

}

func shootPhoto() {

            if UIImagePickerController.isSourceTypeAvailable(.camera) {
                self.picker.allowsEditing = true
                self.picker.sourceType = UIImagePickerControllerSourceType.camera
                self.picker.cameraCaptureMode = .photo
                self.picker.modalPresentationStyle = .fullScreen
                self.present(self.picker,animated: true,completion: nil)
            }

}

//Image picker delegate
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {

    let str = "\(info["UIImagePickerControllerOriginalImage"]!)"

    let s = str.slice(from: "{", to: "}")

    if let arr = s?.components(separatedBy: ","){
        if arr.count >= 2 {
            if Int(arr[0])! > 11000 {
                picker.dismiss(animated:true, completion: nil)
                self.makeToast("Invalid Image!!!")
                return
            }
                     }
        }
    }

    if  let image = info[UIImagePickerControllerOriginalImage] as? UIImage{
        self.UserImageView.image = image
    }
    picker.dismiss(animated:true, completion: nil)
}


func imagePickerControllerDidCancel(_ picker: UIImagePickerController)
{
    picker.dismiss(animated: true, completion: nil)
}

0

এক্সকোড 10, সুইফট 4.2

নীচে বাস্তবায়নের একটি সামান্য অনুকূলিত সংস্করণ। এটি সুইফট ৪.২ এ রয়েছে এবং আমি এটিও পরীক্ষা করে দেখেছি।

আপনি এখানে ভিউকন্ট্রোলারের সম্পূর্ণ কোড দেখতে পারেন। দয়া করে নোট করুন যে আপনাকে স্টোরিবোর্ডে একটি আইবিউলেটলেট (চিত্রভিউ) এবং আইবিএक्शन (ডেটটপঅনচুজ আইজামবটন) সংজ্ঞায়িত এবং সংযুক্ত করতে হবে। আশাকরি এটা সাহায্য করবে.

import UIKit

class ImagePickViewController: UIViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate {

var imagePicker = UIImagePickerController()
@IBOutlet weak var imageView: UIImageView!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
}

@IBAction func didTapOnChooseImageButton(_ sender: Any) {
    let alert:UIAlertController=UIAlertController(title: "Choose Image", message: nil, preferredStyle: UIAlertController.Style.actionSheet)
    let cameraAction = UIAlertAction(title: "Camera", style: UIAlertAction.Style.default) {
        UIAlertAction in
        self.openCamera(UIImagePickerController.SourceType.camera)
    }
    let gallaryAction = UIAlertAction(title: "Gallary", style: UIAlertAction.Style.default) {
        UIAlertAction in
        self.openCamera(UIImagePickerController.SourceType.photoLibrary)
    }
    let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertAction.Style.cancel) {
        UIAlertAction in
    }

    // Add the actions
    imagePicker.delegate = self as UIImagePickerControllerDelegate & UINavigationControllerDelegate
    alert.addAction(cameraAction)
    alert.addAction(gallaryAction)
    alert.addAction(cancelAction)
    self.present(alert, animated: true, completion: nil)
}

func openCamera(_ sourceType: UIImagePickerController.SourceType) {
    imagePicker.sourceType = sourceType
    self.present(imagePicker, animated: true, completion: nil)
}

//MARK:UIImagePickerControllerDelegate

func imagePickerController(_ picker: UIImagePickerController,
                                    didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    imageView.image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage
    imagePicker.dismiss(animated: true, completion: nil)
}

func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
    print("imagePickerController cancel")
}

}

SO নিশ আপনাকে স্বাগতম! কোড-কেবলমাত্র উত্তরগুলি এখানে নিরুৎসাহিত করা হয়েছে, কারণ তারা কীভাবে সমস্যাটি সমাধান হয়েছিল সে সম্পর্কে কোনও অন্তর্দৃষ্টি দেয় না। আপনার কোডটি কীভাবে সমস্যাটি সমাধান করে তার একটি ব্যাখ্যা অন্তর্ভুক্ত করার জন্য দয়া করে আপনার উত্তরটি আপডেট করুন :)
জোয়েল

অনেক প্রশংসা করেছেন, @ জোয়েল। আপনার পরামর্শ অনুসারে উত্তর আপডেট করেছি।
নিশ

0

আপনি এখানে পছন্দ করতে পারেন

var avatarImageView = UIImageView()
var imagePicker = UIImagePickerController()
        
func takePhotoFromGallery() {
    imagePicker.delegate = self
    imagePicker.sourceType = .savedPhotosAlbum
    imagePicker.allowsEditing = true
    
    present(imagePicker, animated: true)
}

func imagePickerController(_ picker: UIImagePickerController,
                           didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    if let pickedImage = info[.originalImage] as? UIImage {
        avatarImageView.contentMode = .scaleAspectFill
        avatarImageView.image = pickedImage
    }
    self.dismiss(animated: true)
}

আশা করি এটি সহায়ক ছিল


-1

সুইফট 3.4.1 এর জন্য, এই কোডটি কাজ করছে:

implements                                                             
class AddAdvertisementViewController : UINavigationControllerDelegate, UIImagePickerControllerDelegate, UIActionSheetDelegate  

var imagePicker = UIImagePickerController()                                
var file :UIImage!

 //action sheet tap on image

 func tapOnButton(){   
    let optionMenu = UIAlertController(title: nil, message: "Add Photo", preferredStyle: .actionSheet)

    let galleryAction = UIAlertAction(title: "Gallery", style: .default, handler:{
        (alert: UIAlertAction!) -> Void in
        self.addImageOnTapped()
    })

    let cameraAction = UIAlertAction(title: "Camera", style: .default, handler:{
        (alert: UIAlertAction!) -> Void in
        self.openCameraButton()
    })

    let cancleAction = UIAlertAction(title: "Cancel", style: .cancel, handler:{
        (alert: UIAlertAction!) -> Void in
        print("Cancel")
    })

    optionMenu.addAction(galleryAction)
    optionMenu.addAction(cameraAction)
    optionMenu.addAction(cancleAction)
    self.present(optionMenu, animated: true, completion: nil)
}


func openCameraButton(){
    if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.camera)
    {
        imagePicker = UIImagePickerController()
        imagePicker.delegate = self
        imagePicker.sourceType = UIImagePickerControllerSourceType.camera;
        imagePicker.allowsEditing = true
        self.present(imagePicker, animated: true, completion: nil)
    }
}


func addImageOnTapped(){
    if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.photoLibrary){
        imagePicker.delegate = self
        imagePicker.sourceType = UIImagePickerControllerSourceType.photoLibrary;
        imagePicker.allowsEditing = true
        self.present(imagePicker, animated: true, completion: nil)
    }
}

//picker pick image and store value imageview
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]){
    if let image = info[UIImagePickerControllerOriginalImage] as? UIImage
    {
            file = image
            imgViewOne.image = image
        imagePicker.dismiss(animated: true, completion: nil);
    }
}

-1
@IBAction func ImportImage(_ sender: Any)
{
    let image = UIImagePickerController()
    image.delegate = self

    image.sourceType = UIImagePickerController.SourceType.photoLibrary

    image.allowsEditing = false

    self.present(image, animated: true)
    {
        //After it is complete
    }


}

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage
    {
        myimage.image = image
    }
    else{
        //
    }
    self.dismiss(animated: true, completion: nil)

    do {
        try context.save()
    } catch {
        print("Could not save. \(error), \(error.localizedDescription)")
    }

}

যোগ UINavigationControllerDelegate, UIImagePickerControllerDelegateবর্গ সংজ্ঞা প্রতিনিধিদের


মন্তব্য যুক্ত করুন, আপনার উত্তরটি ব্যাখ্যা করুন, কীভাবে উত্তর দেওয়া যায় তা পড়ুন
আকসান পি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.