我正在尝试在特定区域内裁剪UIScrollView
内的图片,当裁剪框架上的图片为UIScrollView
时,.AspectFit
的缩放比例为1。
裁剪框架上的目标尺寸应为800x800像素,.AspectFit,侧边空格应为白色。
UIScrollView
(绿色)UIScrollView
(红色)UIImageView
(蓝色)基于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}}(width
或height
)与UIScrollView
相比更大(或相等)时,此方法似乎非常有效{' s UIScrollView
。否则,上面的代码将返回原始图像,这可能是由于单位帧超出[0,1]段的事实。
从逻辑上讲,为了实现我所期待的而不会超出界限,没有任何意义,因为限制因素将会增加。
是否有另一种方法可以在裁剪框内实际裁剪图像,结果图像是一个图像 AspectFitted 到cropFrame,其中空格是白色的?
如果有人对此问题有任何想法或意见,欢迎您回答:)