在特定区域的scrollView内裁剪图像

时间:2016-09-05 03:14:38

标签: ios uiscrollview

问题

我正在尝试在特定区域内裁剪UIScrollView内的图片,当裁剪框架上的图片为UIScrollView时,.AspectFit的缩放比例为1。

裁剪框架上的目标尺寸应为800x800像素,.AspectFit,侧边空格应为白色。

  • UIScrollView(绿色)
  • 裁剪框始终为200x200 pt,位于UIScrollView(红色)
  • 的中心
  • UIImageView(蓝色)

ScrollView + ImageView + Crop Frame

我的方法

基于Apple Docs我可以通过找到原始图像的单位坐标中的帧来实现这一点,我已经实现了如下:

let offsetX = scrollView.contentOffset.x
let offsetY = scrollView.contentOffset.y
let normalizedX = (cropView.frame.origin.x + offsetX) / imageViewFrame.size.width
let normalizedY = (cropView.frame.origin.y + offsetY) / imageViewFrame.size.height
let normalizedWidth = 200.0 / imageViewFrame.size.width
let normalizedHeight = 200.0 / imageViewFrame.size.height

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

然后我基于这个单位裁剪框,我从具有特定目标尺寸(800x800像素)的资产请求图像。

let options = PHImageRequestOptions()
options.deliveryMode = .HighQualityFormat
options.networkAccessAllowed = true
options.normalizedCropRect = cropRect
options.resizeMode = .Exact

let targetSize = CGSize(width: 800, height: 800)

PHImageManager
    .defaultManager()
    .requestImageForAsset(self.albumView.phAsset,
                          targetSize: targetSize,
                          contentMode: .AspectFit,
                          options: options) {
                            result, info in

                            dispatch_async(dispatch_get_main_queue(), {
                                completion(image: result)

                            })
}

问题

contentSize的{​​{1}}(widthheight)与UIScrollView相比更大(或相等)时,此方法似乎非常有效{' s UIScrollView。否则,上面的代码将返回原始图像,这可能是由于单位帧超出[0,1]段的事实。

从逻辑上讲,为了实现我所期待的而不会超出界限,没有任何意义,因为限制因素将会增加。

是否有另一种方法可以在裁剪框内实际裁剪图像,结果图像是一个图像 AspectFitted 到cropFrame,其中空格是白色的?

如果有人对此问题有任何想法或意见,欢迎您回答:)

0 个答案:

没有答案