GVKun编程网logo

在Swift中使用imagePickerController在同一视图控制器中选择两个不同的图像

13

针对在Swift中使用imagePickerController在同一视图控制器中选择两个不同的图像这个问题,本篇文章进行了详细的解答,同时本文还将给你拓展ABPeoplePickerNavigati

针对在Swift中使用imagePickerController在同一视图控制器中选择两个不同的图像这个问题,本篇文章进行了详细的解答,同时本文还将给你拓展ABPeoplePickerNavigationController和UIImagePickerController在ipad iOS7上无法正确显示、iOS swift中UIImagePickerControllerDelegate代理不执行问题、ios – Swift 3中的UIImagePickerController、ios – Swift – 使用UIPageViewController在多个视图控制器之间滑动等相关知识,希望可以帮助到你。

本文目录一览:

在Swift中使用imagePickerController在同一视图控制器中选择两个不同的图像

在Swift中使用imagePickerController在同一视图控制器中选择两个不同的图像

我正在制作一个有两个UIImageViews的应用程序。在每个图像视图中,用户需要能够输入不同的图像。这是我到目前为止的代码。

    var imagePicker = UIImagePickerController()    @IBAction func chooseImage1(sender: AnyObject) {    if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.SavedPhotosAlbum){        println("Button capture")        imagePicker.delegate = self        imagePicker.sourceType = .SavedPhotosAlbum        imagePicker.allowsEditing = false        self.presentViewController(imagePicker, animated: true, completion: nil)    }}@IBAction func chooseImage2(sender: AnyObject) {    if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.SavedPhotosAlbum){        println("Button capture")        imagePicker2.delegate = self        imagePicker2.sourceType = .SavedPhotosAlbum        imagePicker2.allowsEditing = false        self.presentViewController(imagePicker, animated: true, completion: nil)}}func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {    let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage        chooseImage1.image = pickedImage    let pickedImage2 = info[UIImagePickerControllerOriginalImage] as? UIImage    chooseImage2.image = pickedImage2    dismissViewControllerAnimated(true, completion: nil)}func imagePickerControllerDidCancel(picker: UIImagePickerController) {    dismissViewControllerAnimated(true, completion: nil)}

最终为每个不同的图像视图选择相同的图像。我希望能够选择两张单独的照片,每个视图一张。谢谢您的帮助。

答案1

小编典典

您可以为每个按钮设置不同的标签,然后根据按钮的标签更新一个imageView或另一个。您只需要一个UIImagePickerController:

更新: Xcode 8.3.1•Swift 3.1

import UIKitclass ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {    @IBOutlet weak var imageView1: UIImageView!    @IBOutlet weak var imageView2: UIImageView!    var imagePicker = UIImagePickerController()    var imagePicked = 0    override func viewDidLoad() {        super.viewDidLoad()        imagePicker.delegate = self        imagePicker.sourceType = .savedPhotosAlbum        imagePicker.allowsEditing = false    }    @IBAction func chooseImage(_ sender: UIButton) {        if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.savedPhotosAlbum){            imagePicked = sender.tag            present(imagePicker, animated: true)        }    }    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {        let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage        if imagePicked == 1 {            imageView1.image = pickedImage        } else if imagePicked == 2 {            imageView2.image = pickedImage        }        dismiss(animated: true)    }    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {        dismiss(animated: true)    }}

ABPeoplePickerNavigationController和UIImagePickerController在ipad iOS7上无法正确显示

ABPeoplePickerNavigationController和UIImagePickerController在ipad iOS7上无法正确显示

当我尝试使用“ABPeoplePickerNavigationController”或“UI ImagePickerController”时,在大多数情况下它将无法正确加载.它将显示iOS 7(ipad)屏幕中部的模拟器和设备(屏幕截图)的一部分屏幕(透明).在iOS 8中,一切正常.

这是我为ABPeoplePickerNavigationController使用的代码:

ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];
picker.peoplePickerDelegate = self;
self.preserveCurrentEntity = YES;
[self presentViewController:picker animated:NO completion:nil];

UIImagePickerController将打破视频摘录,但为其他任何工作,这是我使用的代码:

UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];

switch (buttonIndex) {
    case ImagePickerModeCamera:
            imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
        break;
    case ImagePickerModeAlbum:
        imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
        break;
    default:
        break;
}
imagePicker.delegate = self;

NSMutableArray *mediaType = [[NSMutableArray alloc] init];

switch (self.actionSheetType) {
    case ActionSheetTypeImage:
        [mediaType addobject:(Nsstring*)kUTTypeImage];
        break;
    case ActionSheetTypeVideo: {
        [mediaType addobject:(Nsstring*)kUTTypeMovie];
        [mediaType addobject:(Nsstring*)kUTTypeVideo];
        imagePicker.allowsEditing =NO;
    }
        break;
    default:
        break;
}

imagePicker.mediaTypes = mediaType;
[self presentViewController:imagePicker animated:NO completion:nil];

这是iOS7中加载ABPeoplePickerNavigationController时发生的情况:

这是iOS8中加载ABPeoplePickerNavigationController时发生的情况:

解决这个问题的办法是什么?

解决方法

看来我发现我的问题的解决方案.

我有一个根视图控制器,有两个xib,一个用于iPad,一个用于iPhone.即使它们非常相似(只有一个较大),似乎我的iPad是造成麻烦的.我不知道为什么.

我现在只使用iPhone,并确保它在iPad上正确调整大小,一切正常.

iOS swift中UIImagePickerControllerDelegate代理不执行问题

iOS swift中UIImagePickerControllerDelegate代理不执行问题


///代码块1

import UIKit
import MobileCoreServices
import AssetsLibrary

/// 检查设备是否支持相机录制
///
/// - Returns: true or false
public func isSupportCameraRecording() -> Bool {
    guard let avTypes: [String] = UIImagePickerController.availableMediaTypes(for: .camera) else {
        return false
    }
    return avTypes.contains(kUTTypeMovie as String)
}

open class cameraVC: NSObject,UIImagePickerControllerDelegate,UINavigationControllerDelegate {
    
    public var cameraVC: UIImagePickerController?
    
    /// 
    public var setCameraDeviceFront: Bool = false
    
    override init() {
        super.init()
        cameraVC = setupImagePicker()
    }    
    
    private func setupImagePicker() -> UIImagePickerController {
        let camera = UIImagePickerController()
            camera.sourceType = UIImagePickerControllerSourceType.camera
            camera.mediaTypes = [kUTTypeMovie as String]
            camera.videoQuality = .typeHigh
            camera.delegate = self
            setCameraDeviceFront(picker: camera)
//            configureCustomUI(picker: camera)
        return camera
    }
    
    private func setCameraDeviceFront(picker: UIImagePickerController) {
        
        let defCameraDeviceFront = UIImagePickerController.isCameraDeviceAvailable(.rear)
        if setCameraDeviceFront && defCameraDeviceFront {
            picker.cameraDevice = .front
        }
    }
    
    private func configureCustomUI(picker: UIImagePickerController) {
        let cameraOverlay = UIView()
        picker.showsCameraControls = false
        picker.cameraOverlayView = cameraOverlay
    }
    
//MARK:            delegate
    public func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        picker.dismiss(animated: true, completion: nil)
    }
    
    public func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        let library = ALAssetsLibrary()
        let url: URL = info["UIImagePickerControllerMediaURL"] as! URL
        if library.videoAtPathIs(compatibleWithSavedPhotosAlbum: url) {
            library.writeVideoAtPath(toSavedPhotosAlbum: url, completionBlock: { ( _, _)in})
        }
        picker.dismiss(animated: true, completion: nil)
    }
}

/// 调用的地方 控制器里面
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        if !isSupportCameraRecording() {
            return
        }
        let camera = cameraVC()
/// 如果 camera.cameraVC.delegate = self 写在这里
        present(camera.cameraVC!, animated: true, completion: nil)
    }
/// 并执行代理方法就会执行,而同样的代码Oc里面不会存在这种情况

如上代码中在相机录制结束后或者点击Cancle 是没有执行代理方法的,而如果把代理方法写在调用的地方,且实现代理方法就会执行,这是什么原因?一样的代码Oc里面却没问题?

 

 

 

ios – Swift 3中的UIImagePickerController

ios – Swift 3中的UIImagePickerController

我最近使用开发人员测试版更新了 Xcode 8中的 Swift 3.
我正在尝试实施Firebase Auth,一切进展顺利.

我的问题:

我正在尝试将图像作为用户的个人资料图片上传到Firebase数据库.

我以为我可以使用UIImagePickerController来做到这一点,但是当我这样做时,我得到了一个

“Thread 7: Signal SIGABRT

我知道这通常表示什么,但我检查了,当我点击它时,我的图像确实打印了我的测试语句.

我失败的方法:

ViewController.swift

import UIKit
import Firebase
import Photos

class ViewController: UIViewController,UITextFieldDelegate,UIImagePickerControllerDelegate,UINavigationControllerDelegate{

@IBOutlet weak var imageView: UIImageView!
@IBOutlet var emailTextField: UITextField!
@IBOutlet var passWordTextField: UITextField!
@IBOutlet var nameTextField: UITextField!

override func viewDidLoad() {
        super.viewDidLoad()

        if FIRAuth.auth()?.currentUser?.uid != nil {
            let storyboard = UIStoryboard(name: "Main",bundle: nil)
            let view = storyboard.instantiateViewController(withIdentifier: "ProfileViewController")
            self.present(view,animated: true,completion: nil)
        }

        imageView.addGestureRecognizer(UITapGestureRecognizer(target: self,action: #selector(handleSelectProfileImageView)))
        imageView.isUserInteractionEnabled = true

        self.emailTextField.delegate = self;
        self.passWordTextField.delegate = self;
        self.nameTextField.delegate = self;
    }

func handleSelectProfileImageView() {
    let picker = UIImagePickerController()

    picker.delegate = self
    picker.allowsEditing = true

    present(picker,completion: nil)
}

我不确定这是否只是Swift 3和开发人员Xcode 8 beta的问题,或者我只是对swift 3做错了.

编辑:

我正在使用GM版的xcode8,但仍然会遇到同样的错误.

解决方法

我认为您需要添加隐私 – 在info.plist文件中为camara和照片库添加密钥,例如xcode 8,例如,
Key : Privacy - Media Library Usage Description
 Value : YES 

 Key : Privacy - Photo Library Usage Description
 Value : YES 

 Key : Privacy - Camara Usage Description
 Value : YES

这里的值是字符串而非布尔值.

试试吧.

查看Apple documentation了解更多详情!

参考:this so post

ios – Swift – 使用UIPageViewController在多个视图控制器之间滑动

ios – Swift – 使用UIPageViewController在多个视图控制器之间滑动

我的UIPageViewController根本不工作.我要做的是在UIPageViewController中切换2个视图控制器.我已经遵循指南,但失败了. Using UIPageViewController with swift and multiple view controllers.第一个视图控制器似乎成功,但当我尝试滑动到第二个视图控制器时,它会抛出此错误消息.我已经正确设置了所有标识符.

Fatal error: unexpectedly found nil while unwrapping an Optional value

这是因为这里的原因

func pageViewController(pageViewController: UIPageViewController,viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {

        let identifier = viewController.restorationIdentifier
        let index = self.identifiers.indexOfObject(identifier!) // error message here

        //if the index is 0,return nil since we dont want a view controller before the first one
        if index == 0 {

            return nil
        }

        //decrement the index to get the viewController before the current one
        self.index = self.index - 1
        return self.viewControllerAtIndex(self.index)

    }

Main.storyboard

源代码:https://github.com/datomnurdin/RevivalxSwiftPageViewController

请指教.谢谢.

解决方法

尝试访问视图控制器的restorationIdentifier时发生崩溃.你用过!解开它,但它没有;作为第一个解决方案,在storyboard中设置restorationIdentifier.

In general,use ! to unwrap a value only if you’re sure it’s not nil (by adding a if statement just before).

关于在Swift中使用imagePickerController在同一视图控制器中选择两个不同的图像的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于ABPeoplePickerNavigationController和UIImagePickerController在ipad iOS7上无法正确显示、iOS swift中UIImagePickerControllerDelegate代理不执行问题、ios – Swift 3中的UIImagePickerController、ios – Swift – 使用UIPageViewController在多个视图控制器之间滑动的相关知识,请在本站寻找。

本文标签: