我有一个ImageView,它对Error in summarise_impl(.data, dots) :
Evaluation error: wrong embedding dimension.
具有centerX和centerY约束,如下图所示
我想为徽标imageView设置动画,使其位于屏幕中央,如下图所示:
我已经尝试了一些代码,但是没有用,老实说,我不确定下面的代码,这是我尝试的方法。也许您有更好的方法。这是我尝试过的
然后删除约束并创建一个新的约束,如下面的代码:
Helper Header View
但是它崩溃并给出错误:
“ NSInvalidLayoutConstraintException”,原因:“约束不正确” 与不兼容类型的锚相关:
也许您有更好的方法来实现这一目标。...
答案 0 :(得分:2)
在创建将self.mainLogoImageView.centerX
与self.view.centerY
相关的第一个约束时出错-将第二个约束更改为self.view.centerX
。您无法将x轴锚点绑定到y轴锚点。
此外,请确保您对其进行了适当的动画处理,请查看我的答案以了解如何使用自动布局here。
在您的情况下:
// remove the initial constraint
self.mainLogoCenterXConstraint.isActive = false
self.mainLogoCenterYConstraint.isActive = false
// create new constraint
let newMainLogoCenterXConstraint = NSLayoutConstraint(
item: self.mainLogoImageView,
attribute: .centerX,
relatedBy: .equal,
toItem: self.view,
attribute: .centerX,
multiplier: 1.0,
constant: 0)
newMainLogoCenterXConstraint.identifier = "mainLogoCenterXConstraint"
newMainLogoCenterXConstraint.isActive = true
let newMainLogoCenterYConstraint = NSLayoutConstraint(
item: self.mainLogoImageView,
attribute: .centerY,
relatedBy: .equal,
toItem: self.view,
attribute: .centerY,
multiplier: 1.0,
constant: 0)
newMainLogoCenterYConstraint.identifier = "mainLogoCenterYConstraint"
newMainLogoCenterYConstraint.isActive = true
self.view.setNeedsLayout()
UIView.animate(withDuration: 1.1, delay: 0.5, usingSpringWithDamping: 0.4, initialSpringVelocity: 0.0, animations: {
self.view.layoutIfNeeded()
}, completion: nil)
答案 1 :(得分:1)
问题在这里
// create new constraint
let newMainLogoCenterXConstraint = NSLayoutConstraint(
item: self.mainLogoImageView,
attribute: .centerX,
relatedBy: .equal,
toItem: self.view,
attribute: .centerY,
multiplier: 1.0,
constant: 0)
您提供Compatible类型的X,y中心,但两者都应为centerX
这还不足以在视图中心显示图像,因为它是helperView的子视图,因此您需要设置
self.helperView.clipsToBounds = false // if it's true