CGAffineTransform 在其他视图上
CGAffineTransform over other view
我的视图中有九个子视图。 (topLeft, top, topRight, left, center, right, bottomLeft, bottom, bottomRight)。当我在中心子视图中使用 CGAffineTransform
执行 animation
时。
这是一个棘手的问题。中心顶部的子视图将被覆盖;其他的不会被覆盖。为什么?
如何覆盖动画中的所有子视图?
override func viewDidLoad() {
super.viewDidLoad()
let top = UIView()
top.backgroundColor = .red
top.frame = CGRect(x: self.view.frame.width/2, y: self.view.frame.height/2, width: 20, height: 20)
top.layer.masksToBounds = true
view.addSubview(top)
let topLeft = UIView()
topLeft.backgroundColor = .orange
topLeft.frame = CGRect(x: self.view.frame.width/2 - 20, y: self.view.frame.height/2, width: 20, height: 20)
topLeft.layer.masksToBounds = true
view.addSubview(topLeft)
let topRight = UIView()
topRight.backgroundColor = .gray
topRight.frame = CGRect(x: self.view.frame.width/2 + 20, y: self.view.frame.height/2, width: 20, height: 20)
topRight.layer.masksToBounds = true
view.addSubview(topRight)
let center = UIView()
center.backgroundColor = .black
center.frame = CGRect(x: self.view.frame.width/2, y: self.view.frame.height/2 + 20, width: 20, height: 20)
view.addSubview(center)
let left = UIView()
left.backgroundColor = .cyan
left.frame = CGRect(x: self.view.frame.width/2 - 20, y: self.view.frame.height/2 + 20, width: 20, height: 20)
view.addSubview(left)
let right = UIView()
right.backgroundColor = .brown
right.frame = CGRect(x: self.view.frame.width/2 + 20, y: self.view.frame.height/2 + 20 , width: 20, height: 20)
view.addSubview(right)
let bottom = UIView()
bottom.backgroundColor = .yellow
bottom.frame = CGRect(x: self.view.frame.width/2 , y: self.view.frame.height/2 + 20 + 20, width: 20, height: 20)
view.addSubview(bottom)
let bottomLeft = UIView()
bottomLeft.backgroundColor = .magenta
bottomLeft.frame = CGRect(x: self.view.frame.width/2 - 20, y: self.view.frame.height/2 + 20 + 20, width: 20, height: 20)
view.addSubview(bottomLeft)
let bottomRight = UIView()
bottomRight.backgroundColor = .green
bottomRight.frame = CGRect(x: self.view.frame.width/2 + 20, y: self.view.frame.height/2 + 20 + 20, width: 20, height: 20)
view.addSubview(bottomRight)
view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleTap)))
}
func handleTap(gesture: UITapGestureRecognizer) {
let location = gesture.location(in: view)
for subview in view.subviews {
if subview.frame.contains(location) {
let scaleUp = CGAffineTransform(scaleX: 3, y: 3)
UIView.animate(withDuration: 0.5, animations: {
subview.transform = scaleUp
}) { (success: Bool) in
//subview.transform = .identity
}
}
}
}
bringSubviewToFront
在应用转换之前。它将位于所有其他子视图之上并覆盖它们。
我的视图中有九个子视图。 (topLeft, top, topRight, left, center, right, bottomLeft, bottom, bottomRight)。当我在中心子视图中使用 CGAffineTransform
执行 animation
时。
这是一个棘手的问题。中心顶部的子视图将被覆盖;其他的不会被覆盖。为什么?
如何覆盖动画中的所有子视图?
override func viewDidLoad() {
super.viewDidLoad()
let top = UIView()
top.backgroundColor = .red
top.frame = CGRect(x: self.view.frame.width/2, y: self.view.frame.height/2, width: 20, height: 20)
top.layer.masksToBounds = true
view.addSubview(top)
let topLeft = UIView()
topLeft.backgroundColor = .orange
topLeft.frame = CGRect(x: self.view.frame.width/2 - 20, y: self.view.frame.height/2, width: 20, height: 20)
topLeft.layer.masksToBounds = true
view.addSubview(topLeft)
let topRight = UIView()
topRight.backgroundColor = .gray
topRight.frame = CGRect(x: self.view.frame.width/2 + 20, y: self.view.frame.height/2, width: 20, height: 20)
topRight.layer.masksToBounds = true
view.addSubview(topRight)
let center = UIView()
center.backgroundColor = .black
center.frame = CGRect(x: self.view.frame.width/2, y: self.view.frame.height/2 + 20, width: 20, height: 20)
view.addSubview(center)
let left = UIView()
left.backgroundColor = .cyan
left.frame = CGRect(x: self.view.frame.width/2 - 20, y: self.view.frame.height/2 + 20, width: 20, height: 20)
view.addSubview(left)
let right = UIView()
right.backgroundColor = .brown
right.frame = CGRect(x: self.view.frame.width/2 + 20, y: self.view.frame.height/2 + 20 , width: 20, height: 20)
view.addSubview(right)
let bottom = UIView()
bottom.backgroundColor = .yellow
bottom.frame = CGRect(x: self.view.frame.width/2 , y: self.view.frame.height/2 + 20 + 20, width: 20, height: 20)
view.addSubview(bottom)
let bottomLeft = UIView()
bottomLeft.backgroundColor = .magenta
bottomLeft.frame = CGRect(x: self.view.frame.width/2 - 20, y: self.view.frame.height/2 + 20 + 20, width: 20, height: 20)
view.addSubview(bottomLeft)
let bottomRight = UIView()
bottomRight.backgroundColor = .green
bottomRight.frame = CGRect(x: self.view.frame.width/2 + 20, y: self.view.frame.height/2 + 20 + 20, width: 20, height: 20)
view.addSubview(bottomRight)
view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleTap)))
}
func handleTap(gesture: UITapGestureRecognizer) {
let location = gesture.location(in: view)
for subview in view.subviews {
if subview.frame.contains(location) {
let scaleUp = CGAffineTransform(scaleX: 3, y: 3)
UIView.animate(withDuration: 0.5, animations: {
subview.transform = scaleUp
}) { (success: Bool) in
//subview.transform = .identity
}
}
}
}
bringSubviewToFront
在应用转换之前。它将位于所有其他子视图之上并覆盖它们。