-1

看来我的buttonViewanchor point正在根据view的位置发生变化。我希望buttonView缩小到它自己的中间,而不是view的中间。我想知道我做错了什么?或者如果我完全误解了定位点?我尝试阅读一些文章,但他们似乎表明,一个对象的锚点指的是它自己的坐标,而不是它的超级视图。CGPointApplyAffineTransform中的锚点位置错误(iOS/Swift)

import UIKit 

class ViewController: UIViewController { 
    var buttonView:UIView! 
    var toggleButton:UIButton! 
    var isVisible = false 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 

     let buttonTitles = ["1", "2", "3"] 
     let size:CGFloat = 100.0 

     let viewSize = CGFloat(buttonTitles.count) * size 
     buttonView = UIView(frame: CGRectMake(40, 40, viewSize, viewSize)) 

     setAnchorPoint(CGPointMake(0.5, 0), forView: buttonView) 
     buttonView.layer.anchorPoint = CGPointMake(0.5, 0.0) 
     view.addSubview(buttonView) 

     for (index, title) in buttonTitles.enumerate() { 
      let button = UIButton(type: .Custom) as UIButton 
      button.frame = CGRectMake(0, size * CGFloat(index), size, size) 
      button.setTitle(title, forState: .Normal) 
      button.backgroundColor = UIColor.redColor() 
      buttonView.addSubview(button) 
     } 

     toggleButton = UIButton(type: .Custom) as UIButton 
     toggleButton.frame = CGRectMake(200, 100, 80, 50) 
     toggleButton.setTitle("Toggle", forState: .Normal) 
     toggleButton.backgroundColor = UIColor.purpleColor() 
     toggleButton.addTarget(self, action: #selector(ViewController.animate), forControlEvents: .TouchUpInside) 
     view.addSubview(toggleButton) 
    } 

    func setAnchorPoint(anchorPoint: CGPoint, forView view: UIView) { 
     var newPoint = CGPointMake(view.bounds.size.width * anchorPoint.x, view.bounds.size.height * anchorPoint.y) 
     var oldPoint = CGPointMake(view.bounds.size.width * view.layer.anchorPoint.x, view.bounds.size.height * view.layer.anchorPoint.y) 

     newPoint = CGPointApplyAffineTransform(newPoint, view.transform) 
     oldPoint = CGPointApplyAffineTransform(oldPoint, view.transform) 

     var position = view.layer.position 
     position.x -= oldPoint.x 
     position.x += newPoint.x 

     position.y -= oldPoint.y 
     position.y += newPoint.y 

     view.layer.position = position 
     view.layer.anchorPoint = anchorPoint 
    } 

    func animate() { 

     if (isVisible) { // collapse it 
      isVisible = false 

      UIView.animateWithDuration(0.5, animations: { 
       self.buttonView.transform = CGAffineTransformMakeScale(0.2, 0.2) 
      }) 
     } 

     else { // expand it 
      isVisible = true 

      UIView.animateWithDuration(0.5, animations: { 
       self.buttonView.transform = CGAffineTransformMakeScale(1.0, 1.0) 
      }) 
     } 
    } 
} 

之前点击切换:enter image description here

点击切换后:enter image description here

回答

-1

没关系,结果发现我只是把我的buttonView's宽度太大。