当前位置: 首页 > 面试题库 >

在动画UIView上点击手势不起作用

谭嘉歆
2023-03-14
问题内容

我在正在翻译动画的UILabel上有一个轻击手势。动画期间,只要在标签上轻按,轻按手势就不会有响应。

这是我的代码:

    label.addGestureRecognizer(tapGesture)

    label.userInteractionEnabled = true
    label.transform = CGAffineTransformMakeTranslation(0, 0)

    UIView.animateWithDuration(12, delay: 0, options: UIViewAnimationOptions.AllowUserInteraction, animations: { () -> Void in
        label.transform = CGAffineTransformMakeTranslation(0, 900)
        }, completion: nil)

手势代码:

func setUpRecognizers() {
    tapGesture = UITapGestureRecognizer(target: self, action: "onTap:")
}
func onTap(sender : AnyObject) {
    print("Tapped")
}

有任何想法吗?谢谢 :)


问题答案:

使用Tapgesture后,您将无法完成自己的工作,原因有1个。手势与标签的框架相关联。开始动画时,标签的最后一帧立即更改,而您只是在观看假电影(动画)。如果您能够触摸屏幕上的(0,900),它将在发生动画时照常触发。不过,有一种方法可以使此方法有所不同。最好的办法是使用touchesBegan。这是我刚刚编写的用于检验理论的扩展,但可以进行扩展以适合您的需求,例如,您可以使用实际的子类并访问标签属性而无需循环。

extension UIViewController{

public override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    guard let touch = touches.first else{return}
    let touchLocation = touch.locationInView(self.view)

    for subs in self.view.subviews{
        guard let ourLabel = subs as? UILabel else{return}
        print(ourLabel.layer.presentationLayer())

        if ourLabel.layer.presentationLayer()!.hitTest(touchLocation) != nil{
            print("Touching")
            UIView.animateWithDuration(0.4, animations: {
                self.view.backgroundColor = UIColor.redColor()
                }, completion: {
                    finished in
                    UIView.animateWithDuration(0.4, animations: {
                        self.view.backgroundColor = UIColor.whiteColor()
                        }, completion: {
                            finished in
                    })
                })
            }
        }

    }
}

您可以看到它正在测试CALayer.presentationLayer()的坐标。这就是我所说的电影。老实说,我还没有完全围绕表示层及其工作原理进行研究。



 类似资料:
  • 安装程序 ruby 2.3.3p222(2016-11-21修订版56859)[i386-mingw32] 想要执行的动作/步骤 我想对一个元素执行轻敲(而不是单击) 同时使用selenium-webDrive版本 IRB 到目前为止还不错。但是当我试图执行选项卡操作时。失败了 我觉得我错过了一些小细节(我对appium不熟悉),我只是没有看到我在这里犯的错误。所以如果有人能给我指出正确的方向,那

  • 问题内容: 我正在尝试使形状的动画随着样本大小的增加(从100增加到1000)而呈指数分布。还有一个滑块,用于配置发行版的lambda参数,以及一个用于启动动画的按钮。 我的问题是,即使布局得到渲染,当我按下开始按钮时也没有动画发生。到目前为止,这是我的尝试: 为了简化起见,我在Python笔记本中运行它: 问题答案: 您应该注意函数的名称空间。 考虑 因此,您需要处理实际对象,而不是它们的某些本

  • 我还是Selenium测试世界的新手,目前正在使用SeleniumChromeWebDriver进行测试。 我想做的是在下面的弹出对话框中: < li >在文本输入框中输入一个数字 < li >单击应用按钮 < li >然后将触发web应用程序向服务器端发布信息。 这是我到目前为止发现的,如果我取消对<code>线程的注释。睡眠(500),一切都将完美工作。但是没有<code>线程。sleep(5

  • 我想在我正在写的一个应用程序中取得效果,也许你能帮我。 视图层次结构在这一点上相当复杂,所以为了简单起见,让我们假设我有一个UILabel,其Alpha值设置为0。目前,我正在使用一个UILongPressGestureRecognitor,它在几秒钟后调用一个方法来更新UILabel的文本,并执行一个UIView动画块来很好地显示它(在1秒的时间内将Alpha设置回1——淡入)。 该块在新更新的

  • 我在https://www.yatra.com/etw-desktop/.学习自动化硒测试。当我尝试单击名为“亚洲”的图像按钮(图片已附)时,我收到一个超时异常。请帮我弄清楚出了什么问题。 显示要单击的Web元素的图像

  • 我已经创建了一个iOS6针对iOS5的应用程序。该动画在模拟器上运行良好,但在具有iOS5的设备上出现问题。请给我一些建议。提前谢谢。 代码:[UIView动画宽度:0.5动画:^{answerImageView.transform=CGAffineTransformScale(imageView.transform,0.0f,0.0f);}完成:^(BOOL finished){(if(fini