Как преобразовать несколько видов в одно и то же место (CGPoint) - PullRequest
0 голосов
/ 17 февраля 2020

У меня есть несколько UIImageView s, разбросанных по виду.

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

Я пытаюсь создать функцию, используя UIView.animate... функции и свойство 'transform', которое приводит все эти UIImageView в центр superview. Я использую следующий код:

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)
}

Я использую эту функцию c stati:

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

ПРИМЕЧАНИЕ. Кроме того, я буду приносить эти изображения затем вернитесь в исходное положение , для которого я буду использовать CGAffineTransform.identity

Изображения не отображаются в центре. Как мне этого добиться? Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 17 февраля 2020

Я думаю, что ваша проблема заключалась в том, что вы не уменьшили размер изображения, чтобы они располагались точно в центре экрана.

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)
}

enter image description here

0 голосов
/ 17 февраля 2020

Что собирается использовать center

UIView.animate(withDuration: 0.5) {
    images.forEach { $0.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($0) }

UIView.animate(withDuration: 0.5) {
    subviewes.forEach { $0.center = self.view.center }
}
...