簡體   English   中英

為什么在UIViewPropertyAnimator中使用'unowned'

[英]Why use 'unowned' in UIViewPropertyAnimator

所以我一直在做一些關於UIViewPropertyAnimator的閱讀,在我一直在看的例子中,他們做了類似這樣的事情:

animator = UIViewPropertyAnimator(duration: 2.0, curve: .easeInOut, animations: { 
        [unowned self, redBox] in
        redBox.center.x = self.view.frame.width
        redBox.transform = CGAffineTransform(rotationAngle: CGFloat.pi).scaledBy(x: 0.001, y: 0.001)
    })

我不理解'[unowned self,redBox]'部分內容。 任何人都可以解釋我們使用它的原因嗎?

我知道無主通常用於決定引用計數是如何確定的,並且它不能設置為nil,因為引用將不存在而沒有另一個(作為弱的替代),但我不明白使用在這里,我不明白括號部分。 它在我看來是一個動畫項目的數組和它位於的視圖?

完整代碼如下:

import UIKit

class ViewController: UIViewController {

    var animator: UIViewPropertyAnimator!

    override func viewDidLoad() {
        super.viewDidLoad()

        //redBox

        let redBox = UIView(frame: CGRect(x: 10, y: 100, width: 100, height: 100))
        redBox.translatesAutoresizingMaskIntoConstraints = false// lar oss redigere posisjon og sånn selv, uten at xcode setter posisjon/størrelse i stein.
        redBox.backgroundColor = .red
        redBox.center.y = view.center.y

        view.addSubview(redBox)

        animator = UIViewPropertyAnimator(duration: 2.0, curve: .easeInOut, animations: { 
            [unowned self, redBox] in
            redBox.center.x = self.view.frame.width
            redBox.transform = CGAffineTransform(rotationAngle: CGFloat.pi).scaledBy(x: 0.001, y: 0.001)
        })

        // slider

        let slider = UISlider()
        slider.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview(slider)
        slider.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
        slider.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true
        slider.addTarget(self, action: #selector(sliderChanged), for: .valueChanged)

    }
    func sliderChanged(_ sender: UISlider){
        animator.fractionComplete = CGFloat(sender.value)
    }

}
  1. 我們需要使用weakunowned否則將創建所有權(參考)周期( self => animator => animations => self )。

  2. 我們可以使用unowned而不是weak因為我們可以確定selfanimator一起被摧毀,當self被解除分配時,動畫將不再運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM