【问题标题】:added button to sceneKit view but it has a lag在sceneKit视图中添加了按钮,但它有一个滞后
【发布时间】:2015-10-09 11:36:16
【问题描述】:

我在 sceneKit 视图中添加了一个自定义按钮。当它被触摸时,它会播放一个动画,表明它被点击了。我面临的问题是用户触摸和动画开始之间的延迟。我的场景有 28.1K 三角形和 84.4K 顶点。这是太多还是我需要以不同的方式实现按钮。场景以 60fps 渲染。我通过 sceneView.addSubview 添加了按钮: 感谢您的回答

     viewDidLoad(){
     // relevant code
        starButton = UIButton(type: UIButtonType.Custom)
        starButton.frame = CGRectMake(100, 100, 50, 50)
        starButton.setImage(UIImage(named: "yellowstar.png"), forState: UIControlState.Normal)
        sceneView.addSubview(starButton)
        starButton.addTarget(self, action: "starButtonClicked", forControlEvents: UIControlEvents.TouchUpInside)
        starButton.adjustsImageWhenHighlighted = false
        }



    func starButtonClicked(){
            animateScaleDown()

        }

    func animateScaleDown(){

        UIView.animateWithDuration(0.1, animations: {
            self.starButton.transform = CGAffineTransformMakeScale(0.8, 0.8)

            }, completion: { _ in
                self.wait()
        })

    }

    func wait(){
        UIView.animateWithDuration(0.2, animations: {}, completion: { _ in
            UIView.animateWithDuration(0.2, animations: {
                self.starButton.transform = CGAffineTransformMakeScale(1, 1)

            })
        })
    }

【问题讨论】:

  • 能贴一下触摸和动画代码吗?
  • 我编辑了我的问题
  • 延迟多少?如果您非常敏感,您可能会在动画开始之前看到 SDK 和 iOS 固有的 2 帧延迟。
  • 大约半秒。 Waaaaay 非常适合任何良好的用户体验。我想知道,我应该学习 SprikeKit 并使用 overlaySKScene 属性而不是向 overlaySKScene 添加按钮吗?

标签: ios uibutton scenekit


【解决方案1】:

好的,我解决了。有问题的代码是

starButton.addTarget(self, action: "starButtonClicked", forControlEvents: UIControlEvents.TouchUpInside)

UIControlEvent.TouchUpInside 给人一种滞后的错觉。将其更改为 .TouchDown 会好很多。

【讨论】:

    【解决方案2】:

    对于 Swift 5

    var starButton = UIButton()
    
        func a ()  {
    
            starButton = UIButton(type: UIButton.ButtonType.custom)
            starButton.frame = CGRect(x: 100, y: 100, width: 50, height: 50)
            starButton.backgroundColor = .blue
            SpielFenster.addSubview(starButton)
    
            starButton.addTarget(self, action: #selector(starButtonClicked), for: UIControl.Event.touchDown)
            starButton.adjustsImageWhenHighlighted = false
        }
        @objc func starButtonClicked(){
            animateScaleDown()
        }
    
        func animateScaleDown(){
    
            UIView.animate(withDuration: 0.1, animations: {
                self.starButton.transform = CGAffineTransform(scaleX: 0.8, y: 0.8)
    
            }, completion: { _ in
                self.wait()
            })
    
        }
    
        func wait(){
            UIView.animate(withDuration: 0.2, animations: {}, completion: { _ in
                UIView.animate(withDuration: 0.2, animations: {
                    self.starButton.transform = CGAffineTransform(scaleX: 1, y: 1)
    
                })
            })
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      相关资源
      最近更新 更多