HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 在Swift中为两个函数提取手势识别器?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
想象一下iOS屏幕,您可以上下移动手指来做某事(想象一下,“缩放”),

要么,

作为一个单独的功能,你可以左右移动你的手指做某事(想象一下,“改变颜色”或“旋转”).

他们是

分离

功能,你只能在一次做一个.

因此,如果它“以”开始“为横向版本,它仍然只是一个横向版本.相反,如果它“开始”为垂直版本,它仍然只是一个垂直版本.

这样做有点棘手,我将在下面介绍如何做到这一点……基本模式是:

if (r.state == .began || panway == .WasZeros )
    {
    prev = tr
    if (tr.x==0 && tr.y==0)
        {
        panway = .WasZeros
        return
        }
    if (abs(tr.X)>abs(tr.y)) ... set panway
    }

这非常有效,这里是如何在Swift中完成的.

在storyboard中使用UIPanGestureRecognizer,将其拖到相关视图中.将代理连接到视图控制器并将插座设置为此调用ultraPan:

enum Panway
    { 
    case Vertical
    case Horizontal
    case WasZeros
    }
var panway:Panway = .Vertical
var prev:CGPoint!

@IBACtion func ultraPan(r:UIPanGestureRecognizer!)
    {
    let tr = r.translationInView(r.view)

    if (r.state == .began || panway == .WasZeros )
        {
        prev = tr

        if (tr.x==0 && tr.y==0)
            {
            panway = .WasZeros
            return
            }

        if (abs(tr.X)>abs(tr.y))
            {
            panway = .Horizontal
            }
        else
            {
            panway = .Vertical
            }
        }

    if (panway == .Horizontal)  // your left-right function
        {
        var h = tr.x - prev.x
        let sensitivity:CGFloat = 50.0
        h = h / sensitivity
        // adjust your left-right function,example
        someProperty = someProperty + h
        }

    if (panway == .Vertical)    // bigger/smaller
        {
        var v = tr.y - prev.y
        let sensitivity:CGFloat = 2200.0
        v = v / sensitivity
        // adjust your up-down function,example
        someOtherProperty = someOtherProperty + v
        }

    prev = tr
    }

没关系.

但是创建UIPanGestureRecognizer的新子类(或其他东西)肯定会更好,因此有两个新概念……

UIHorizontalPanGestureRecognizer

UIVerticalPanGestureRecognizer

那些基本上是一维的pAnners.

我完全不知道你是否会……委托子类化?还是上课? (什么类?),或者某种扩展……的确,我基本上对此完全无能为力:)

目标是一个人的代码,你可以有这样的东西……

@IBACtion func horizontalPanDelta( ..? )
    {
    someProperty = someProperty + delta
    }
@IBACtion func verticalPanDelta( ..? )
    {
    otherProperty = otherProperty + delta
    }

如何以这种方式继承/扩展UIPanGestureRecognizer?

解决方法

正确.这正是如何做到的,这是正常的做法.实际上,这正是手势识别器的用途:每个g.r.仅识别其自己的手势,并且当它确实时,它会使竞争的手势识别器退避.这就是手势识别器的重点!否则,我们仍然会回到前期.纯粹触动的日子等等(哦,恐怖).

事实上,我的在线书籍讨论了你在这里给出的一个例子:

http://www.apeth.com/iOSBook/ch18.html#_subclassing_gesture_recognizers

这是一个在Swift中实现它的实际可下载示例:

https://github.com/mattneub/Programming-iOS-Book-Examples/blob/master/bk2ch05p203gestureRecognizers/ch18p541gestureRecognizers/HorizVertPanGestureRecognizers.swift

观察此处使用的策略.我们制作UIPanGestureRecognizer子类.我们覆盖了touchesBegan和touchesMoved:一旦识别开始,我们就会在看到下一次触摸沿着错误的轴时失败. (您应该观看Apple关于此主题的视频;正如他们所说,当您将手势识别器子类化时,您应该“提前失败,经常失败”.)我们还会覆盖translationInView,以便只能直接沿轴移动.结果(如果您下载项目本身就可以看到)是一个可以水平或垂直拖动但不以其他方式拖动的视图.

大佬总结

以上是大佬教程为你收集整理的ios – 在Swift中为两个函数提取手势识别器?全部内容,希望文章能够帮你解决ios – 在Swift中为两个函数提取手势识别器?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。