前提・実現したいこと
autoLayoutについて勉強しているのですが、理解が浅いので質問させていただきます。
ソースコードのまま動かすと、animation?(一瞬白くなる)したあとまた左の画像のように画面いっぱいに広がりません。
制約を付与した後に、制約を付与したviewのサイズを変更する方法が知りたいです。
またボタンを押して、全画面になった後、再度ボタンを押せば制約したサイズに戻したいのですが、可能なのでしょうか?
.isActive = falseとしても一度付与した制約は解けないのでしょうか?
初歩的な質問かと思いますが、回答お願いします。
該当のソースコード
import UIKit class ViewController: UIViewController { var Button = UIButton() var flag:Bool = true override func viewDidLoad() { super.viewDidLoad() Button.backgroundColor = UIColor.lightGray Button.setTitle("Button", for: .normal) Button.translatesAutoresizingMaskIntoConstraints = false self.view.addSubview(Button) Button.addTarget(self, action: #selector(ViewController.tapAction(_:)), for: .touchUpInside) Button.widthAnchor.constraint(equalToConstant: 120).isActive = true Button.heightAnchor.constraint(equalToConstant: 60).isActive = true Button.centerYAnchor.constraint(equalToSystemSpacingBelow: self.view.centerYAnchor, multiplier: 1.0).isActive = true Button.centerXAnchor.constraint(equalToSystemSpacingAfter: self.view.centerXAnchor, multiplier: 1.0).isActive = true // Do any additional setup after loading the view. } @objc func tapAction(_ : AnyObject){ if flag == true { UIView.animate(withDuration: 0.5, delay: 0.0, options: .curveLinear, animations: { self.Button.widthAnchor.constraint(equalToConstant: 120).isActive = false self.Button.heightAnchor.constraint(equalToConstant: 60).isActive = false self.Button.centerYAnchor.constraint(equalToSystemSpacingBelow: self.view.centerYAnchor, multiplier: 1.0).isActive = false self.Button.centerXAnchor.constraint(equalToSystemSpacingAfter: self.view.centerXAnchor, multiplier: 1.0).isActive = false self.Button.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height) self.flag = false }, completion: nil) }else if flag == false { UIView.animate(withDuration: 0.5, delay: 0.0, options: .curveLinear, animations: { self.Button.widthAnchor.constraint(equalToConstant: 120).isActive = true self.Button.heightAnchor.constraint(equalToConstant: 60).isActive = true self.Button.centerYAnchor.constraint(equalToSystemSpacingBelow: self.view.centerYAnchor, multiplier: 1.0).isActive = true self.Button.centerXAnchor.constraint(equalToSystemSpacingAfter: self.view.centerXAnchor, multiplier: 1.0).isActive = true self.flag = true }, completion: nil) } } }
開発環境
Swift5
Xcode Version 11.3.1 (11C504)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/31 04:24
2020/03/31 04:35 編集
2020/03/31 17:01