我正在实现基于捏合的缩放,并且缩放从 View 的左上角发生,而不是从中心缩放。经过几次尝试(这似乎是 cs 原点问题或类似问题),没有找到一个好的解决方案,但必须有一些(也许是明显的)方法从 View 中心进行缩放。如果之前已经回答过这个问题,希望能找到答案(经过广泛搜索后未找到)。如果没有,我们将感谢您提供正确方法的意见。
编辑以下答案(谢谢): 这是我最初使用的代码:
funcinchDetected(pinchGestureRecognizer:UIPinchGestureRecognizer){
let scale = pinchGestureRecognizer.scale
view.transform = CGAffineTransformScale(view.transform, scale, scale)
pinchGestureRecognizer.scale = 1.0
}
捏合时, View 内的内容将向右和向下扩展,而不是向左和向上扩展(因此假设它不是“从中心”缩放)。希望这能让它更清楚。
最佳答案
如果不查看代码,就很难知道发生了什么。默认情况下,变换确实作用于 View 中心,这似乎就是您想要的。您可以通过更改 View 层上的anchorPoint 属性来使变换作用于其他点。
或者,您可以通过将原点平移到该点,进行变换,然后再次平移回来,来创建关于任意点的变换。例如:
func *(left: CGAffineTransform, right: CGAffineTransform) -> CGAffineTransform {
return left.concatenating(right)
}
public extension CGAffineTransform {
static func scale(_ scale:CGFloat, aboutPoint point:CGPoint) -> CGAffineTransform {
let Tminus = CGAffineTransform(translationX: -point.x, y: -point.y)
let S = CGAffineTransform(scaleX: scale, y: scale)
let Tplus = CGAffineTransform(translationX: point.x, y: point.y)
return Tminus * S * Tplus
}
}
view.transform = CGAffineTransform.scale(2.0, aboutPoint:point)
该点相对于原点,默认情况下为中心。
关于ios - 保持缩放以 UIView 中心为中心(而不是从左上角缩放),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42352186/