Ios 如何将多个视图转换到同一位置(CGPoint)
我有多个Ios 如何将多个视图转换到同一位置(CGPoint),ios,swift,uiviewanimation,cgpoint,Ios,Swift,Uiviewanimation,Cgpoint,我有多个UIImageViews,分布在一个视图中 @IBOutlet var leftIVs: [UIImageView]! @IBOutlet var topIVs: [UIImageView]! @IBOutlet var rightIVs: [UIImageView]! 我正在尝试使用UIView.animate…函数和“transform”属性创建一个函数,它将所有这些UIImageViews置于superview的中心。我正在使用以下代码: let performInitialTr
UIImageView
s,分布在一个视图中
@IBOutlet var leftIVs: [UIImageView]!
@IBOutlet var topIVs: [UIImageView]!
@IBOutlet var rightIVs: [UIImageView]!
我正在尝试使用UIView.animate…
函数和“transform”属性创建一个函数,它将所有这些UIImageView
s置于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)
}
我正在使用这个静态函数:
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 { $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 }
}
我认为你的问题在于你没有缩小图像视图的大小,使它们堆叠在屏幕的正中央
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)
}
当前的行为是什么?基本上,它们会向中心移动一点,但不会堆积在中心。靠近左边缘的图像堆叠在中心的左侧。类似地,右边的一个堆栈靠近中心顶部。如果OP使用自动布局,这是不可能的。如果我想在一段时间后将这些UIImageView恢复到原始位置,该怎么办?我不认为这会有帮助。你的代码给我的结果与我的代码相同。该代码在我这方面工作得非常好,你能为你得到的结果添加一个可视化表示吗?现在工作得很好。只需在
viewdide
中执行代码,而不是viewwillbeen
。这似乎仍然是奇怪的行为。