ios 13 PHImageManager.default (). requestImage и Fusuma - PullRequest
0 голосов
/ 03 октября 2019

Я использую модуль Fusuma для своего проекта, но в последней iOS 13 есть одна ошибка, связанная с изображением, которое выбрано в Галерее.

, точно говоря, если выбранное изображение из галереи (на устройстве iphone с ios 13, а не на симуляторе), то размеры изображения: ширина: 39 и высота: 39, функции ниже Fusuma , расположенная в FusumaViewController

private func requestImage(with asset: PHAsset, cropRect: CGRect, completion: @escaping (PHAsset, UIImage) -> Void) {
        DispatchQueue.global(qos: .default).async(execute: {
            let options = PHImageRequestOptions()
            options.deliveryMode = .highQualityFormat
            options.isNetworkAccessAllowed = true
            options.normalizedCropRect = cropRect
            options.resizeMode = .exact

            let targetWidth  = floor(CGFloat(asset.pixelWidth) * cropRect.width)
            let targetHeight = floor(CGFloat(asset.pixelHeight) * cropRect.height)
            let dimensionW   = max(min(targetHeight, targetWidth), 1024 * UIScreen.main.scale)
            let dimensionH   = dimensionW * self.getCropHeightRatio()

            let targetSize   = CGSize(width: dimensionW, height: dimensionH)

            PHImageManager.default().requestImage(for: asset, targetSize: targetSize, contentMode: .aspectFill, options: options) { result, info in
                guard let result = result else { return }

                DispatchQueue.main.async(execute: {
                    completion(asset, result)
                })
            }
        })
    }

    private func fusumaDidFinishInMultipleMode() {
        guard let view = albumView.imageCropView else { return }

        let normalizedX = view.contentOffset.x / view.contentSize.width
        let normalizedY = view.contentOffset.y / view.contentSize.height
        let normalizedWidth  = view.frame.width / view.contentSize.width
        let normalizedHeight = view.frame.height / view.contentSize.height

        let cropRect = CGRect(x: normalizedX,
                              y: normalizedY,
                              width: normalizedWidth,
                              height: normalizedHeight)

        var images = [UIImage]()
        var metaData = [ImageMetadata]()

        for asset in albumView.selectedAssets {
            requestImage(with: asset, cropRect: cropRect) { asset, result in
                images.append(result)
                metaData.append(self.getMetaData(asset: asset))

                if asset == self.albumView.selectedAssets.last {
                    self.doDismiss {
                        self.delegate?.fusumaMultipleImageSelected(images, source: self.mode, metaData: metaData)
                    }
                }
            }
        }
    }

requestImage (...) возвращает неверный размер изображения

1 Ответ

0 голосов
/ 10 октября 2019

В документации сказано, что PHImageManager может вызывать requestImage завершение несколько раз, и для окончательного вызова должен быть образ с запрошенным targetSize.

...