【问题标题】:How do I invalidate CADisplayLink with a UIButton?如何使用 UIButton 使 CADisplayLink 无效?
【发布时间】:2021-03-19 02:05:26
【问题描述】:

极端菜鸟。我定义了一个 CADisplayLink,然后我想稍后使用 UIButton 使其无效。我收到错误“在范围内找不到”,因为(我假设)链接是在 func 内部初始化的。无法弄清楚如何“进入”该函数来入侵它。 代码: ``` 函数 myDisplayLink() {让 displayLink = CADisplayLink(目标:自我,选择器:#selector(myCycle)) displayLink.add(到:.current,forMode:RunLoop.Mode.default) }

@IBAction func OFF(_ sender: UIButton)
{ ????? }
```

【问题讨论】:

    标签: ios uibutton invalidation cadisplaylink


    【解决方案1】:

    你可以在你的函数范围之外将它声明为一个可选的,在你的类的根目录然后在你的函数中初始化它,像这样:

    class: SomeClass {
    
     var displayLink: CADisplayLink?
    
     func myDisplayLink() {
      displayLink = CADisplayLink(target: self, selector: #selector(myCycle))
      displayLink!.add(to: .current, forMode: RunLoop.Mode.default) 
     }
    
     @IBAction func OFF(_ sender: UIButton) {
      displayLink!.invalidate()
     }
    
    }
    

    【讨论】:

    • 谢谢。当我进行更改时,我得到“选项类型'CADisplayLink的值?'必须解包以引用已封装基类型“CADisplayLink”的成员“添加”。不确定如何“解包”。
    • 那是我的错,我忘了在我的代码示例中“解包”可选。我更新了我的回复,请注意!现在的性格。或者,您可以使用 !代替 ? (例如,var: displayLink: CADisplayLink!),那么你就不需要使用 !稍后打开它。但请记住,在您初始化它之前它是一个 NIL 值,所以除非您确定它有一个值,或者除非您使用条件展开,否则不要引用它。
    • 太棒了!谢谢!!
    猜你喜欢
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    相关资源
    最近更新 更多