사용자가 Swift로 이미지를 선택할 수 있도록 하는 방법은 무엇입니까?
저는 스위프트로 첫 iOS 애플리케이션(아이폰 전용)을 작성하고 있습니다.기본 애플리케이션 보기에서는 사용자가 사진 갤러리에서 이미지를 선택할 수 있어야 합니다.
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 장면이 있습니다.
View Controller
- Top Layout Guide
- Bottom Layout Guide
- View
- Image View
First Responder
Exit
하지만 앱을 시작하면 검은 화면만 나옵니다.내가 뭘 잘못하고 있는 거지?내가 찾은 또 다른 샘플 코드는 Objective-C에 있는데, 이것은 나에게 도움이 되지 않습니다.
UIImagePickerController로 이미지를 선택하려면 다음 코드를 사용합니다.
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
}
}
@user3182143 답변에 따라 swift 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 alertController: UIAlertController = {
let controller = UIAlertController(title: "Warning", message: "You don't have camera", preferredStyle: .alert)
let action = UIAlertAction(title: "OK", style: .default)
controller.addAction(action)
return controller
}()
viewController?.present(alertController, animated: true)
}
}
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>
Swift 3의 경우:
먼저 info.plist에 다음 키를 추가해야 합니다.
<key>NSPhotoLibraryUsageDescription</key> <string>This app requires access to the photo library.</string>View 컨트롤러는 다음 프로토콜을 준수해야 합니다.
UIImagePickerControllerDelegate,UINavigationControllerDelegate:class ImagePickerViewController: UIViewController,UIImagePickerControllerDelegate, UINavigationControllerDelegate {}반환되거나 선택된 이미지를 바인딩하는 데 사용할 UI 이미지를 선언해야 합니다.
@IBOutlet weak var myImageView: UIImageView! @IBoutlet weak var upLoadImageBtn:UIImage! let imagePicker = UIImagePickerController()선택 도구 이미지 대리자를 View Controller로 설정합니다.
imagePicker.delegate = self업로드 버튼의 경우 작업을 실행하고 이미지 선택기를 표시하려면 다음 이미지에 연결해야 합니다.
@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) }View 컨트롤러는 이미지 선택기 대리인에 대한 대리 방법을 구현해야 합니다.
// 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) }
스위프트 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
}
}
}
이미지 선택을 위해 가장 이해하기 쉬운 코딩을 제공할 것입니다. 이것을 참조하십시오.
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.")
}
좋은 하루 보내세요 :-)
@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.")
}
XCODE 10.1 / SWIFT 4.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.")
}
}
}
사진 라이브러리 이미지를 빠르게 코딩하여 표시하려면 다음 작업을 수행합니다.
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)]
}
이 질문이 1년 전의 질문이라는 것은 알고 있지만, 다음과 같은 간단한 코드(대부분 이 튜토리얼에서 제공됨)가 저에게 잘 적용되고 있습니다.
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)
}
물론 위의 답변은 주요 문제를 해결합니다.
Info.plist에 다음 플래그가 없었기 때문에 사진 앨범을 시작하는 동안 Swift 3.0에서 충돌이 발생했습니다.
개인정보 보호 - 사진 라이브러리 사용설명 -> NS포토 라이브러리 사용설명
개인정보 보호 - 카메라 사용설명 -> NSCamera 사용설명
[![screenshot[1]](https://i.stack.imgur.com/CmxrH.png)
유사한 문제가 발생하면 추가해주시기 바랍니다.
감사합니다!
스위프트 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)
}
}
Xcode 10, Swift 4.2
다음은 구현의 약간 최적화된 버전입니다.이것은 Swift 4.2에 있으며 저도 테스트해 보았습니다.
ViewController의 전체 코드는 여기에서 확인할 수 있습니다.스토리보드에서 정의되고 연결된 IBOutlet(이미지 보기) 및 IBaction(DidTapOnChooseImageButton)도 정의해야 합니다.이게 도움이 되길 바랍니다.
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")
}
}
당신은 여기처럼 할 수 있습니다.
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)
}
이것이 도움이 되었기를 바랍니다.
이를 위한 쉬운 방법은 다음과 같습니다.
그러나 먼저 info.plist에 (Privacy - Photo Library Usage Description)을 추가해야 하며, 뷰 컨트롤러에 버튼과 UIImageView가 있어야 합니다.
그런 다음 UIImageView의 아웃렛(이 코드에서는 아웃렛을 myImage라고 함)과 버튼의 동작(내 코드에서 가져오기 동작이라고 함)을 만듭니다.
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
}
}
@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
별도의 버튼이 필요하지 않을 경우 다른 방법이 있습니다.이미지 보기 자체에 제스처를 첨부했습니다. 이미지를 누르면 경고가 두 가지 옵션으로 팝업됩니다.갤러리/사진 라이브러리에서 선택하거나 경고를 취소할 수 있습니다.
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")
}
}
질문에 더 추가하여 이미지를 CoreData에 저장하는 논리를 구현했습니다.
버튼을 클릭하고 이미지 갤러리를 열고 이미지 뷰에 이미지를 설정합니다. swift 3.0
세 명의 딜러 UI이미지 피커 컨트롤러 딜러를 추가합니다.UIPopover 컨트롤러 대표단,UI 내비게이션 컨트롤러 대표단
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)
}
이것을 시도해 보세요. 그것은 쉽습니다.UI를 사용하여 이미지를 선택하려면이미지 선택기 컨트롤러 대표자
@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)
}
아래 코드에서 사용할 수 있는 일반 이미지만 선택하려면 선택한 이미지가 파노라마 이미지가 아닌지 확인합니다.
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)
}
Swift 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);
}
}
언급URL : https://stackoverflow.com/questions/25510081/how-to-allow-user-to-pick-the-image-with-swift
'programing' 카테고리의 다른 글
| JavaScript에서 마지막 슬래시 뒤에 있는 문자열 값 가져오기 (0) | 2023.08.14 |
|---|---|
| 중간 텍스트의 최대 길이? (0) | 2023.08.14 |
| mariadb 가장 긴 동시 번호 시퀀스를 찾는 방법 (0) | 2023.08.14 |
| iOS 애플리케이션이 백그라운드로 이동하면 긴 작업이 일시 중지됩니까? (0) | 2023.08.14 |
| ng 클래스의 다중 조건 - 각도 4 (0) | 2023.08.09 |