2015-01-30 1 views
0

저는 iOS 개발에 익숙하며 도움이 필요합니다. UIImagePicker를 사용하여 사용자가 자신의 이미지를 선택합니다. 해당 사용자가 iOS 라이브러리가 아닌 애플리케이션의 폴더에있는 그림을 선택하도록합니다. 이 모든 것은 UIImagePicker를 사용합니다. 이것이 가능한가? 내가 잘못하면 웹 사이트 나 자습서로 리디렉션하십시오.UIImagePicker (SWIFT)에 대한 새로운 소스 유형 변경/생성

감사합니다.

샘플 코드 :

클래스의 ViewController : UIViewController에, UINavigationControllerDelegate, UIImagePickerControllerDelegate {

@IBOutlet var PhotoOpeningView: UIImageView! 

let userDefaults = NSUserDefaults.standardUserDefaults() 


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. 
} 



@IBAction func ChooseAImageBTN(sender: AnyObject) { 

    let imagePickerView = UIImagePickerController() 
    imagePickerView.delegate = self 

    imagePickerView.sourceType = UIImagePickerControllerSourceType.SavedPhotosAlbum 
    self.presentViewController(imagePickerView, animated: true, completion: nil) 

} 


@IBAction func btnSave(sender: UIButton) { 
    let LoadSaveNo = PhotoOpeningView 
    userDefaults.setObject(LoadSaveNo, forKey: "LoadSave") 
    userDefaults.synchronize() 
} 


func imagePickerController(picker :UIImagePickerController, 
    didFinishPickingMediaWithInfo info : [NSObject : AnyObject]) { 
     var Image = info[UIImagePickerControllerOriginalImage] as UIImage 
     PhotoOpeningView.image = Image 
     self.dismissViewControllerAnimated(true, completion: nil) 

} 
+0

폴더는 문서 루트 디렉토리를 의미? UIPopupover에있는 모든 이미지를 문서 폴더의 축소판으로 표시해야합니다. – Shashi3456643

+0

예 문서 루트 디렉토리. 이미지를 응용 프로그램에 통합하려고합니다. 사용자가 버튼을 클릭하면 이미지를 선택할 수 있습니다. 하지만 아이폰의 라이브러리에있는 이미지를 원하지 않습니다. 당신은 UIPopupover를 사용합니까? – arnaud

+0

Ok 애플리케이션 폴더 (NsBundle의 의미)에서 이미지에 액세스하려고합니다. UIPopoverController를 사용하여 NSBundle의 모든 이미지를로드 할 수 있습니다. UICollectionview에 이미지를 표시 할 수 있으며 프로토콜을 만들고 위임하여 viewController에 이미지를 가져와야합니다. 사과 UIImagePickerController를 사용할 수 없습니다. 너 자신을 만들어야 해. – Shashi3456643

답변

0
//This class has UIButton when you click on button it opens PhotoPickersVC. Which will show all images from your application 
class ViewController: UIViewController,PhotoPickersDelegate { 

    @IBOutlet var imageView:UIImageView! 

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

    } 

    @IBAction func buttonBrowsePhotos(sender: UIButton) 
    { 

     let storyboard = UIStoryboard(name: "Main", bundle: nil) 
     let nc :UINavigationController = storyboard.instantiateViewControllerWithIdentifier("PhotoNC") as UINavigationController 
     var array:NSArray = nc.viewControllers as NSArray 
     let vc:PhotoPickersVC=array.objectAtIndex(0) as PhotoPickersVC; 
     vc.delegate=self; 
     self.presentViewController(nc, animated: true, completion: nil) 

    } 

    func selectPhoto(image: UIImage) 
    { 
     imageView.image=image; 
    } 

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


} 



//Protocol used to send photo to ViewController class using delegate 
protocol PhotoPickersDelegate 
{ 
    func selectPhoto(var image : UIImage) 
} 

//This class shows all the photos of your application 
class PhotoPickersVC: UICollectionViewController { 
    let reuseIdentifier = "Cell" 
    var myImages :NSArray? 
    var delegate : PhotoPickersDelegate? 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     var myBundle : NSBundle = NSBundle.mainBundle(); 
     myImages = myBundle.pathsForResourcesOfType("jpeg", inDirectory: nil); 
    } 

    @IBAction func buttonCancel(sender: UIButton) 
    { 
     self.dismissViewControllerAnimated(true, completion: nil) 
    } 

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


    override func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int { 
     //#warning Incomplete method implementation -- Return the number of sections 
     return 1 
    } 


    override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
     //#warning Incomplete method implementation -- Return the number of items in the section 
     return myImages!.count 
    } 

    override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 

     let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as PhotoCellCollectionViewCell 
     print(cell); 




     var imageName=myImages?.objectAtIndex(indexPath.row).lastPathComponent 
     var imageName1 :NSString=imageName! 
     var image:UIImage=UIImage(named: imageName1)! 
     cell.imageView.image=image 

     return cell 
    } 

    override func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) 
    { 

     if((self.delegate) != nil) 
     { 
      var imageName=myImages?.objectAtIndex(indexPath.row).lastPathComponent 
      var imageName1 :NSString=imageName! 
      var image:UIImage=UIImage(named: imageName1)! 

      delegate?.selectPhoto(image) 
      self.dismissViewControllerAnimated(true, completion: nil) 
     } 
    } 


} 



//This class used to subclass UICollectionViewCell which is used in PhotoPickersVC 
class PhotoCellCollectionViewCell: UICollectionViewCell { 
    @IBOutlet var imageView: UIImageView! 
} 
+0

고맙습니다. 나는 그걸로 일을하고 당신에게 새로운 것을 주겠다! – arnaud

+0

나는 그 것이 기쁘다 :) – Shashi3456643

0

the UIImagePickerController documentation을 통해 모양을 갖는, 내가 무엇을 요구하는지하는 것은 가능하다고 생각하지 않습니다. UIImagePickerControllerSourceType을 살펴보면 PhotoLibrary, SavedPhotosAlbum 또는 Camera의 3 가지 가능성 만있는 것을 볼 수 있습니다.이 유형은 'custom'소스 유형을 시험해 볼 수있는 충분한 공간을 제공하지 않습니다.

내 권장 사항은 UICollectionView를 사용하여 이미지를 표시하고 사용자가 컬렉션 뷰 대리자 메서드를 사용하여 이미지를 선택할 수있게하는 것입니다. 필요한 모든 것이 단순한 이미지 선택기라면 아주 빨리 채찍질 할 수 있습니다.

목표 - C : http://www.raywenderlich.com/22324/beginning-uicollectionview-in-ios-6-part-12

스위프트 : 응용 프로그램의 http://www.raywenderlich.com/78550/beginning-ios-collection-views-swift-part-1

+0

고맙습니다.하지만 이미 설명서를 보았습니다. 옵션을 추가 할 수 있는지 알고 싶었습니다. 좀 더 정확히 말하면 캘린더를 만들고 싶습니다. 사용자는 각 입력 상자 (시간)에 대해 응용 프로그램에 연결된 폴더에서 300 개의 이미지 중 하나를 선택합니다. – arnaud

+0

문서 외부에 비밀 정보가 없습니다. '옵션'을 추가 할 방법이 없습니다. 몇 가지 맞춤 캘린더를 만들었으며 컬렉션보기를 사용할 때마다 만들었습니다. 또한 사용자에게 이미지를 표시하고 선택할 수 있도록하기 위해 컬렉션보기가 최선의 방법입니다. 컬렉션보기를 배우면 빠르게 멋진 앱을 제작할 수 있습니다. – Frankie

+0

예. 도움을 청하는 데 감사드립니다. – arnaud