使用 UIPinchGestureRecognizer 沿一个方向缩放 UIView
Scaling a UIView along one direction with UIPinchGestureRecognizer
在我的应用程序中,我有一个可拖动的 UIView
,我在其中添加了一个 UIPinchGestureRecognizer
。按照 this 教程,默认情况下视图沿 x 和 y 方向缩放。是否可以用一根手指仅沿一个方向缩放?我的意思是,例如,我像往常一样用拇指和食指轻敲 UIView
,但是当我握住拇指时,我只能在一个方向上移动食指,然后 UIView
应该缩放沿着该维度取决于索引移动的方向。
实际上,我是通过向我的 UIView
添加引脚来实现的,如下所示:
我只是在想我的应用程序使用 UIPinchGestureRecognizer
可能会更好用。
我希望我已经解释清楚了,如果你有一些提示或教程或文档 link 给我,我将不胜感激。
在 CGAffineTransformScale(view.transform, recognizer.scale, recognizer.scale)
中仅更新一个轴:X 或 Y 为 recognizer.scale
并保留另一个 1.0f
CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)
为了知道应该缩放哪个轴,您需要做一些数学运算来查看手势的两个手指之间的角度,并根据该角度来决定缩放哪个轴。
可能是
enum Axis {
case X
case Y
}
func axisFromPoints(p1: CGPoint, _ p2: CGPoint) -> Axis {
let absolutePoint = CGPointMake(p2.x - p1.x, p2.y - p1.y)
let radians = atan2(Double(absolutePoint.x), Double(absolutePoint.y))
let absRad = fabs(radians)
if absRad > M_PI_4 && absRad < 3*M_PI_4 {
return .X
} else {
return .Y
}
}
在我的应用程序中,我有一个可拖动的 UIView
,我在其中添加了一个 UIPinchGestureRecognizer
。按照 this 教程,默认情况下视图沿 x 和 y 方向缩放。是否可以用一根手指仅沿一个方向缩放?我的意思是,例如,我像往常一样用拇指和食指轻敲 UIView
,但是当我握住拇指时,我只能在一个方向上移动食指,然后 UIView
应该缩放沿着该维度取决于索引移动的方向。
实际上,我是通过向我的 UIView
添加引脚来实现的,如下所示:
我只是在想我的应用程序使用 UIPinchGestureRecognizer
可能会更好用。
我希望我已经解释清楚了,如果你有一些提示或教程或文档 link 给我,我将不胜感激。
在 CGAffineTransformScale(view.transform, recognizer.scale, recognizer.scale)
中仅更新一个轴:X 或 Y 为 recognizer.scale
并保留另一个 1.0f
CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)
为了知道应该缩放哪个轴,您需要做一些数学运算来查看手势的两个手指之间的角度,并根据该角度来决定缩放哪个轴。
可能是
enum Axis {
case X
case Y
}
func axisFromPoints(p1: CGPoint, _ p2: CGPoint) -> Axis {
let absolutePoint = CGPointMake(p2.x - p1.x, p2.y - p1.y)
let radians = atan2(Double(absolutePoint.x), Double(absolutePoint.y))
let absRad = fabs(radians)
if absRad > M_PI_4 && absRad < 3*M_PI_4 {
return .X
} else {
return .Y
}
}