gpt4 book ai didi

swift - 为什么在 UIViewPropertyAnimator 中使用 'unowned'

转载 作者:搜寻专家 更新时间:2023-10-31 22:20:01 25 4
gpt4 key购买 nike

所以我一直在做一些关于 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] in”部分。谁能解释一下我们用它做什么?

我知道 unowned 通常用于决定如何确定引用计数,并且不能将其设置为 nil,因为没有另一个引用将不存在(作为 weak 的替代),但我不知道看懂这里的用法,括号部分看不懂。在我看来它是一组动画项目及其所在的 View ?

完整代码如下:

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 => 动画 => self).

  2. 我们可以使用 unowned 而不是 weak 因为我们可以确定 selfanimator一起销毁,当 self 被释放时,动画将不再运行。

关于swift - 为什么在 UIViewPropertyAnimator 中使用 'unowned',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41191437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com