针对在Swift中使用imagePickerController在同一视图控制器中选择两个不同的图像这个问题,本篇文章进行了详细的解答,同时本文还将给你拓展ABPeoplePickerNavigati
针对在Swift中使用imagePickerController在同一视图控制器中选择两个不同的图像这个问题,本篇文章进行了详细的解答,同时本文还将给你拓展ABPeoplePickerNavigationController和UIImagePickerController在ipad iOS7上无法正确显示、iOS swift中UIImagePickerControllerDelegate代理不执行问题、ios – Swift 3中的UIImagePickerController、ios – Swift – 使用UIPageViewController在多个视图控制器之间滑动等相关知识,希望可以帮助到你。
本文目录一览:- 在Swift中使用imagePickerController在同一视图控制器中选择两个不同的图像
- ABPeoplePickerNavigationController和UIImagePickerController在ipad iOS7上无法正确显示
- iOS swift中UIImagePickerControllerDelegate代理不执行问题
- ios – Swift 3中的UIImagePickerController
- ios – Swift – 使用UIPageViewController在多个视图控制器之间滑动
在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使用的代码:
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代理不执行问题
///代码块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
我正在尝试实施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,但仍然会遇到同样的错误.
解决方法
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在多个视图控制器之间滑动
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
请指教.谢谢.
解决方法
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在多个视图控制器之间滑动的相关知识,请在本站寻找。
本文标签: