如何将视图动画到X和Y的中心?

时间:2019-01-09 09:37:39

标签: ios swift uiviewanimation

我有一个ImageView,它对Error in summarise_impl(.data, dots) : Evaluation error: wrong embedding dimension. 具有centerX和centerY约束,如下图所示

enter image description here

我想为徽标imageView设置动画,使其位于屏幕中央,如下图所示: enter image description here

我已经尝试了一些代码,但是没有用,老实说,我不确定下面的代码,这是我尝试的方法。也许您有更好的方法。这是我尝试过的

首先,我尝试为两个约束赋予标识符: enter image description here enter image description here

然后删除约束并创建一个新的约束,如下面的代码:

Helper Header View

但是它崩溃并给出错误:

  

“ NSInvalidLayoutConstraintException”,原因:“约束不正确”   与不兼容类型的锚相关:   

也许您有更好的方法来实现这一目标。...

2 个答案:

答案 0 :(得分:2)

在创建将self.mainLogoImageView.centerXself.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