Swift UIImage 不能用重力动画
Posted
技术标签:
【中文标题】Swift UIImage 不能用重力动画【英文标题】:Swift UIImage cant be animated with gravity 【发布时间】:2020-02-23 21:44:58 【问题描述】:我在 Google 上查看了所有内容,但内容并不多。 Swift 的社区真的这么小吗???
我有一张图片,在长按时,我希望它在重力作用下落下并撞到屏幕底部。
我得到的错误是
无法将“UIView”类型的值转换为预期的参数类型 '[UIDynamicItem]'
我已经尝试过 UILabel、UIImage、UIImageView、Rect、UIView,但我所做的任何事情都会出现此错误。 我的目标是使用 UIImage 或 UIImageView。
这是我用于动画的代码:
var animator: UIDynamicAnimator!
var gravity: UIDynamicBehavior!
var collision : UICollisionBehavior!
var redBoxView: UIView?
@IBOutlet weak var detailsImageWeather: UIImageView!
override func viewDidLoad()
super.viewDidLoad()
animator = UIDynamicAnimator(referenceView: self.view)
let imageTap = UILongPressGestureRecognizer(target: self, action: #selector(imageTapped))
detailsImageWeather.addGestureRecognizer(imageTap)
@objc func imageTapped()
var frameRect = CGRect(x: 150, y: 20, width: 60, height: 60)
redBoxView = UIView(frame: frameRect)
redBoxView?.backgroundColor = UIColor.red
self.view.addSubview(redBoxView!)
let image = detailsImageWeather.image // This is what i want to use instead of redBoxView
gravity = UIGravityBehavior(items: redBoxView!)
animator.addBehavior(gravity)
collision = UICollisionBehavior (items: redBoxView!)
collision.translatesReferenceBoundsIntoBoundary = true
animator.addBehavior(collision)
let behavior = UIDynamicItemBehavior(items: [redBoxView!])
behavior.elasticity = 2
我做错了什么?在谷歌上找不到更多可以尝试的东西
【问题讨论】:
【参考方案1】:错误表明您需要一个UIDynamicItem
的数组。很容易错过小方括号。
您实际上是用redBoxView
(一个对象)而不是[redBoxView]
(一个数组)来配置您的UIGravityBehavior
和UICollisionBehavior
。这就是您收到错误的原因。
你需要把你的配置改成这个
gravity = UIGravityBehavior(items: [redBoxView!]) //redBoxView passed in an array
还有这个
collision = UICollisionBehavior (items: [redBoxView!]) //redBoxView passed in an array
【讨论】:
以上是关于Swift UIImage 不能用重力动画的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 swift 将 Images.xcassets 中的图像加载到 UIImage 中
将一张图像分成多个部分后,如何在 Swift 中使用 UIImage 数组?