我可以使用 UIPinchGestureRecognizers 来区分水平和垂直捏合吗?

发布于 2024-12-29 12:46:32 字数 126 浏览 0 评论 0原文

我有一个用户可以捏放大或缩小的视图。我希望它沿着两个轴工作 - 如果捏合主要是水平的,它将水平地增大/缩小对象,但如果捏合主要是垂直的,它将垂直地增大/缩小对象。

我可以用一两个捏识别器来实现这一点吗?如果可以,如何实现?

I have a view which the user can pinch to grow or shrink. I'd like this to work along two axes - if the pinch is mostly horizontal, it will grow/shrink the object horizontally, but if the pinch is mostly vertical, it will grow/shrink the object vertically.

Can I achieve this with one or two pinch recognizers, and if so, how?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

苄①跕圉湢 2025-01-05 12:46:32

您也许可以使用 UIPinchGestureRecognizer 来实现此目的,但您必须编写代码来确定捏合是水平还是垂直。我还没有测试过这个:

typedef enum {
    PinchAxisNone,
    PinchAxisHorizontal,
    PinchAxisVertical
} PinchAxis;

PinchAxis pinchGestureRecognizerAxis(UIPinchGestureRecognizer *r) {
    UIView *view = r.view;
    CGPoint touch0 = [r locationOfTouch:0 inView:view];
    CGPoint touch1 = [r locationOfTouch:1 inView:view];
    CGFloat tangent = fabsf((touch1.y - touch0.y) / (touch1.x - touch0.x));
    return
        tangent <= 0.2679491924f ? PinchAxisHorizontal // 15 degrees
        : tangent >= 3.7320508076f ? PinchAxisVertical   // 75 degrees
        : PinchAxisNone;
}

You might be able to use a UIPinchGestureRecognizer for this, but you will have to write code to figure out if the pinch is horizontal or vertical. I haven't tested this:

typedef enum {
    PinchAxisNone,
    PinchAxisHorizontal,
    PinchAxisVertical
} PinchAxis;

PinchAxis pinchGestureRecognizerAxis(UIPinchGestureRecognizer *r) {
    UIView *view = r.view;
    CGPoint touch0 = [r locationOfTouch:0 inView:view];
    CGPoint touch1 = [r locationOfTouch:1 inView:view];
    CGFloat tangent = fabsf((touch1.y - touch0.y) / (touch1.x - touch0.x));
    return
        tangent <= 0.2679491924f ? PinchAxisHorizontal // 15 degrees
        : tangent >= 3.7320508076f ? PinchAxisVertical   // 75 degrees
        : PinchAxisNone;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文