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

标签 objective-c ios uigesturerecognizer

我有一个 View ,用户可以通过捏合来扩大或缩小。我希望它沿两个轴工作 - 如果捏合主要是水平的,它会水平地增大/缩小对象,但如果捏合主要是垂直的,它会垂直增大/缩小对象。

我可以用一个或两个捏合识别器实现这一点吗?如果可以,怎么做?

最佳答案

您可以为此使用 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;
}

关于objective-c - 我可以使用 UIPinchGestureRecognizers 来区分水平和垂直捏合吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9064760/

相关文章:

ruby-on-rails - Ruby on Rails 和 Cocoa - POST 将值作为 NULL 放入数据库

ios - 如何使用 swift 水平添加 tableview 将 UICollectionView 实现到 UITableviewCell 中?

ios - Xcode - 打开官方 Facebook 应用程序 (5.0.1) 未定向到正确的链接

ios - 无法将 CollectionViewCell 移动到末尾

ios - Swift UIGestureRecogniser 跟随手指

c++ - 在 C++ 文件中包含 Objective-C 头文件

ios - 初始化弱属性的惯用方法?

iphone - 自动释放和属性

ios - Facebook Graph 请求返回姓名但不返回电子邮件

ios - iOS 中滑动手势识别器的问题