如何将多个视图转换到同一位置(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)
}
我有多个 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)
}