如何将多个视图转换到同一位置(CGPoint)

How to transform multiple view to same location(CGPoint)

我有多个 UIImageView,分布在一个视图中。

@IBOutlet var leftIVs: [UIImageView]!
@IBOutlet var topIVs: [UIImageView]!
@IBOutlet var rightIVs: [UIImageView]!

我正在尝试使用 UIView.animate... 函数和 'transform' 属性 创建一个函数,它将所有这些 UIImageView 置于 [=16] 的中心=].我正在使用以下代码:

let performInitialTransformation: ((UIImageView)->()) = { (card) in
    let cardCenter = CGPoint(x: card.frame.midX, y: card.frame.midY)
    let viewCenter = CGPoint(x: self.view.bounds.midX, y: self.view.bounds.midY)
    let deltaPoint = cardCenter - viewCenter //also tried (viewCenter - cardCenter)
    UIView.animate(withDuration: 0.5, animations: {
        card.transform = CGAffineTransform.init(translationX: deltaPoint.x, y: deltaPoint.y)
    }) { (done) in 
    }
}

for card in topIVs {
    performInitialTransformation(card)
}

for card in leftIVs {
    performInitialTransformation(card)
}

for card in rightIVs {
    performInitialTransformation(card)
}

我正在使用这个静态函数:

extension CGPoint {
    static func -(lhs: CGPoint, rhs: CGPoint) -> CGPoint {
        return CGPoint(x: rhs.x - lhs.x, y: rhs.y - lhs.y)
    }
}

注意:另外,之后我会将这些图像放回原来的位置,为此我将使用 CGAffineTransform.identity

图片没有显示在中间。我怎样才能做到这一点?提前致谢!

即将使用什么center

UIView.animate(withDuration: 0.5) {
    images.forEach { [=10=].center = superview.center }
}

完整示例

var subviewes = [UIView]()
var view = UIView(frame: CGRect.init(x: 0, y: 0, width: 30, height: 30))
view.backgroundColor = .yellow
subviewes.append(view)

view = UIView(frame: CGRect.init(x: 0, y: 0, width: 20, height: 20))
view.backgroundColor = .green
subviewes.append(view)

view = UIView(frame: CGRect.init(x: 0, y: 0, width: 10, height: 10))
view.backgroundColor = .red
subviewes.append(view)

subviewes.forEach { self.view.addSubview([=11=]) }

UIView.animate(withDuration: 0.5) {
    subviewes.forEach { [=11=].center = self.view.center }
}

我认为您的问题是您没有减小图像视图的大小,以便它们堆叠在屏幕的正中央。

let deltaX = (self.view.center.x - card.frame.minX) - card.frame.width/2
let deltaY = (self.view.center.y - card.frame.minY) - card.frame.height/2
UIView.animate(withDuration: 1) {
    card.transform = .init(translationX: deltaX, y: deltaY)
}