我正在开发绘图功能。我需要用户能够看到他们手指下绘制的内容。照片位于
UIScrollView
内。我基本上只是想裁剪当前指针位置周围的区域并将其显示在屏幕顶部的单独视图中。下面的 GIF 来自 Android,显示了我想要实现的行为(请参阅顶部的圆形区域,我将其称为“缩放器”窗口):
我在 iOS 中实现此功能时遇到困难。以下代码是我尝试将此缩放窗口实现为矩形:
UIGraphicsBeginImageContextWithOptions(CGSize(width: zoomerWindowWidth, height: zoomerWindowWidth), false, 0)
let cropRect = CGRect(
x: -(lastPointTouched.x - zoomerWindowWidth / 2),
y: -(lastPointTouched.y + zoomerWindowWidth / 2),
width: view.bounds.size.width,
height: view.bounds.size.height
)
mainScrollView.drawHierarchy(in: cropRect, afterScreenUpdates: true)
let image = UIGraphicsGetImageFromCurrentImageContext()
zoomerImageView.image = image
这几乎可以工作,但当前触摸点不会保持在缩放窗口的中心。当
UIScrollView
放大或缩小时,窗口会变得更加不对齐。我尝试乘以比例因子都失败了。
这是目前的样子:
TLDR:我需要小窗口保持在当前触摸位置的中心。有人可以帮忙吗?
这是完整的代码库:https://github.com/gavingt/ios_draw_zoom。请特别参阅此处。
一位友好的 Redditor 找到了解决方案:
let lastPointTouched = view.convert(self.lastPointTouched, from: drawingImageView)
let cropRect = CGRect(
x: -(lastPointTouched.x - zoomerWindowWidth / 2),
y: -(lastPointTouched.y - zoomerWindowWidth/2 ),
width: view.bounds.size.width,
height: view.bounds.size.height
)
您还可以查看工作版本的最新 Github 提交。