2016-10-25 4 views
0

나는스위프트 (3)을 이용하고 있고 20 개의 UIViewcontroller어떻게 저장하고 UIImage를 View Controller에서 불러올 수 있습니까?

에 20 개의있는 UIImage 뷰를 생성 한 https://developer.apple.com/library/content/referencelibrary/GettingStarted/DevelopiOSAppsSwift/Lesson4.html 사과 그들은 등 photoImageView1photoImageView2 현재 각 일반적인 이미지 입력 ​​자신을 클릭 할 수있는 호출을 다음되었다 영상.

나는 사용자가 자신의 이미지를 입력 할 수 있기를 원하지만 이미지를 다시 열었을 때 그 이미지를 입력하면됩니다. viewcontroller 입력 한 이미지가 있습니다.

많은 다른 방법을 보았지만 실패했습니다. 나는이 질문을 Save images in NSUserDefaults? 다음에 시도했지만 다시 실패했습니다. 어떤 도움을 주시면 감사하겠습니다. 고마워요.

+1

는 "imput"당신이 이미지를 소유, 당신은 UIImagePickerController를를 사용해야합니다. 따라서 선택한 이미지를 저장하십시오. DocumentDirectory에서 (고유하게 이름을 지정하십시오) ARRAY/.PLIST/MODEL에 경로를 저장하십시오. – Wolverine

답변

1

나는이 방법을 사용하는 것이 좋지만 쉽지는 않을 수 있습니다.

import UIKit 


class timetable: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate { 

@IBOutlet var imageviewtimetable: UIImageView! 

@IBAction func saveMyImage(_ sender: UIBarButtonItem) { 

    let myTimeTableImage = imageviewtimetable.image 
    let theImageData:NSData = UIImagePNGRepresentation(myTimeTableImage!)! as NSData 

    UserDefaults.standard.set(theImageData, forKey: "mySavedImage") 

    let data = UserDefaults.standard.object(forKey: "mySavedImage") 
    imageviewtimetable.image = UIImage(data: data as! Data) 



} 




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



    let data = UserDefaults.standard.object(forKey: "mySavedImage") 
    imageviewtimetable.image = UIImage(data: data as! Data) 

}

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

@IBAction func selectImageFromPhotoLibrary(_ sender: Any) { 

    let imagePickerController = UIImagePickerController() 
    imagePickerController.sourceType = .photoLibrary 
    imagePickerController.delegate = self 
    present(imagePickerController, animated: true, completion: nil) 


} 



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


func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { 

    let selectedImage = info[UIImagePickerControllerOriginalImage] as! UIImage 
    imageviewtimetable.image = selectedImage 

    dismiss(animated: true,completion:nil) 
} 



/* 
// MARK: - Navigation 

// In a storyboard-based application, you will often want to do a little preparation before navigation 
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    // Get the new view controller using segue.destinationViewController. 
    // Pass the selected object to the new view controller. 
} 
*/ 

}

0

이미지 이름을 데이터베이스, iCloud, plist 또는 Userdefaults에 저장할 수 있습니다. 디스크에 이미지를 저장할 수 있지만 사진 라이브러리를 사용하려면 :

import PlaygroundSupport 
    import UIKit 

    func save(image: UIImage, name: String) -> Bool { 
     guard var path = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first, 
      let imageData = UIImagePNGRepresentation(image) else { 
       return false 
     } 
     path = path.appendingPathComponent(name) 
     do { 
      try imageData.write(to: path) 
     } catch { 
      return false 
     } 
     return true 
    } 

    func loadImage(name: String) -> UIImage? { 
     guard var path = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else { 
      return nil 
     } 
     path = path.appendingPathComponent(name) 
     return UIImage(contentsOfFile: path.relativePath) 
    } 

    let image = UIImage(named: "test.png")! 
    save(image: image, name: "test2.png") 
    let loadedImage = loadImage(name: "test2.png") 
    PlaygroundPage.current.liveView = UIImageView(image: loadedImage) 

편집 : 복사 및 놀이터에 붙여 그것을 실행할 수 있도록 나는 전체 놀이터에 소스 코드를 변경했습니다. 필요한 작업은 test.png 파일을 Resources 폴더로 드래그하는 것입니다.

+0

나는 (이미지 데이터 = UIImagePNGRepresentation (이미지) else {) 이미지 부분을 보자. 그렇다면 무엇을 할 것인가? 그것은 함수를 사용할 때 오류 빠진 매개 변수와 함께 올라오고 내가 UIImage 형식의 UIImageView 형식을 사용할 수 없다는 것을 알게 될 것이라고 상상할 수있는 다른 것으로 변경합니다. – Yellow

+0

나는 내가 그 이름으로 그걸 알아 내지 않아야한다고 생각해? 그 이름을 거기에 두십시오. 여기서 이미지는 ....이며 그 다음에 (이름)은 파일 디렉토리에 저장하기 위해 이름에 넣습니다. – Yellow

+0

이름은 파일 이름입니다. 문서 디렉토리에 저장됩니다. 문서 디렉토리 아래에 자신 만의 디렉토리를 만들 수 있지만이 예제는 t hat를 사용하지 않습니다. 코드는있는 그대로 작동합니다. 놀이터에서 테스트 해 보았습니다. 손실 압축을 원한다면 UIImagePNGRepresentation을 UIImageJPGRepresentation으로 변경할 수 있습니다. –

관련 문제