在集合视图xcode 8 swift 3.0.1中显示来自库和相机的拼贴中的多个图像

时间:2017-02-22 10:47:42

标签: swift3 xcode8

我正在研究swift 3.0.1和xcode 8.2.1, 我想从图库中选择多个图像,并在集合视图中显示不同的拼贴画,当我从图库中选择图像并按下完成按钮集合视图时没有显示任何内容,但是当我按下手机屏幕时,屏幕上显示的图像。告诉我我的代码中有什么错误以及如何完成我的任务。我导入这些框架Photos,BSImagePicker,BSGridCollectionViewLayout。这是我的代码

    @IBOutlet weak var collection: UICollectionView!

    var imagePicker = UIImagePickerController()
    var imageArray = [UIImage]()


override func viewDidLoad() {

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

    imagePicker.delegate = self
    collection.delegate = self
    collection.dataSource = self

}

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


@IBAction func Camera(_ sender: Any) {
    if UIImagePickerController.isSourceTypeAvailable(.camera){
    imagePicker.sourceType = .camera
    imagePicker.allowsEditing = false
    imagePicker.cameraCaptureMode = .photo
    imagePicker.cameraFlashMode = .auto
    imagePicker.modalPresentationStyle = .fullScreen
    self.present(imagePicker, animated: true, completion: nil)

    }

else{

    let alert = UIAlertController(title: "No Camera", message: "Your Device has No Camera", preferredStyle: .alert)
    let action = UIAlertAction(title: "OK", style: .destructive, handler: nil)
    alert.addAction(action)
    self.present(alert, animated: true, completion: nil)
    }


    }


@IBAction func Library(_ sender: Any) {

    let vc = BSImagePickerViewController()
    vc.maxNumberOfSelections = 4
    //vc.takePhotoIcon = UIImage(named: "Tick")

    vc.albumButton.tintColor = UIColor.blue
    vc.cancelButton.tintColor = UIColor.blue
    vc.doneButton.tintColor = UIColor.blue
    vc.selectionCharacter = "✓"
    vc.selectionFillColor = UIColor.green
    vc.selectionStrokeColor = UIColor.clear
    vc.selectionShadowColor = UIColor.black
    vc.selectionTextAttributes[NSForegroundColorAttributeName] = UIColor.lightGray
    vc.cellsPerRow = {( verticalSize: UIUserInterfaceSizeClass, horizontalSize: UIUserInterfaceSizeClass) -> Int in

        switch (verticalSize, horizontalSize){

        case(.compact , .regular):
            return 3

        case (.compact, .compact): // iPhone5-6 landscape
            return 3
        case (.regular, .regular): // iPad portrait/landscape
            return 3
        default:
            return 3
        }

        }

    bs_presentImagePickerController(vc, animated: true, select: { (asset: PHAsset) -> Void in

        print("Selected: \(asset)")
        let imageManager = PHImageManager.default()

        let requestOptions = PHImageRequestOptions()
        requestOptions.isSynchronous = true
        requestOptions.deliveryMode = .highQualityFormat


        imageManager.requestImage(for: asset, targetSize: CGSize(width: 132, height: 114)  ,contentMode: .aspectFill, options: requestOptions, resultHandler:
            {

                image, error in
                self.imageArray.append(image!)

        })

        self.collection.reloadData()
    },

        deselect: { (asset: PHAsset) -> Void in
        print("Deselected: \(asset)")

    },
        cancel: { (asset: [PHAsset]) -> Void in
            print("Cancel: \(asset)")
        },

        finish: { (asset: [PHAsset]) -> Void in
            print("Finish: \(asset)")
        }, completion: nil)
    }

func numberOfSections(in collectionView: UICollectionView) -> Int {
    return 1
}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return imageArray.count

}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let Cell : CellClass = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CellClass

    Cell.imageView.image = self.imageArray[indexPath.row]

    return Cell

}

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

     if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage  {

        imageArray.append(pickedImage)

     }

else {
    print("Image not Picked")

    }

    dismiss(animated: true, completion: nil)

}


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

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    let width = collectionView.frame.width / 3 - 1


    return CGSize(width: width, height: width)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
    return 1.0
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
    return 1.0
}

func collectionView(_ collectionView: UICollectionView, didHighlightItemAt indexPath: IndexPath) {
    let cell = collectionView.cellForItem(at: indexPath)
    cell?.backgroundColor = UIColor.red
}

func collectionView(_ collectionView: UICollectionView, didUnhighlightItemAt indexPath: IndexPath) {
    let cell = collectionView.cellForItem(at: indexPath)
    cell?.backgroundColor  = UIColor.green
}

0 个答案:

没有答案