-1

buttonViewanchor pointviewの位置に基づいて変更されているようです。私はbuttonViewviewの真ん中ではなく、真ん中に縮小したいと思っています。私は何が間違っているのだろうと思っていたのですか?あるいは、私がアンカーポイントを完全に誤解しているのであれば?私はいくつかの記事を読んでみましたが、オブジェクトのアンカーポイントはスーパービューではなく独自の座標を参照しているように思われました。 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幅が大きすぎる設定が判明しました。

関連する問題