CGAffine转换其他视图

问题描述:

我认为有九个子视图。 (topLeft,top,topRight,left,center,right,bottomLeft,bottom,bottomRight)。当我在中心子视图中使用和CGAffineTransform时。CGAffine转换其他视图

这是一个棘手的问题。覆盖中心的子视图将被覆盖;其他人不会被覆盖。为什么?

我该如何处理动画中的所有子视图?

origin problem expected

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应用该变换之前。它将高于所有其他子视图并将覆盖它们。

+0

你是最棒的! – WeiJay

+0

@WeiJay谢谢!你会如此友善地将我的回答标记为接受吗? –

+0

当然。发帖后接受答案有时间限制:D – WeiJay