본문 바로가기
아이폰 개발/Swift

swift layoutIfNeeded 예제 1

by 인생여희 2021. 7. 22.

 

 

위 화면에서 버튼을 누르면 버튼이 천천히 세로로 길어지고, 가로로 길어지는 이벤트가 발생된다.

아래 코드에서 애니메이션 처리 소스 안에 self.view.layoutIfNeeded() 을 빼보자. 

애니메이션 처리가 되지 않을 것이다. 

 self.view.layoutIfNeeded() 함수를 호출해야지 업데이트된 제약 조건들이 반영이된다.

 

참고로 제약조건을 변수로 빼서 작업을 할 수 있다. 예) heightAnchor .. 

 



import UIKit

class ViewController: UIViewController {
    
    fileprivate var heightAnchor : NSLayoutConstraint!
    fileprivate var widthAnchor: NSLayoutConstraint!
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        
        // 버튼 생성
        self.makeButton()
    }

    private func makeButton(){
        let button = UIButton()
        button.layer.cornerRadius = 12
        button.backgroundColor = .cyan
        button.setTitle("animate", for: .normal)
        button.setTitleColor(.black, for: .normal)
        button.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview(button)
        
        //button.heightAnchor.constraint(equalToConstant: 60).isActive = true
        //button.widthAnchor.constraint(equalToConstant: 100).isActive = true
        
        /// 제약조건을 변수로 뺄 수 있다.
        heightAnchor = button.heightAnchor.constraint(equalToConstant: 60)
        widthAnchor = button.widthAnchor.constraint(equalToConstant: 100)
        
        heightAnchor.isActive = true
        widthAnchor.isActive = true
        
        button.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
        button.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        
        button.addTarget(self, action: #selector(handleAnimation), for:.touchUpInside)
        
    }
    
    
    //MARK: 버튼 클릭
    @objc fileprivate func handleAnimation(){
        print("handleAnimation...")
        
        //MARK: 높이 변경
        heightAnchor.constant = 400
        
        UIView.animate(withDuration: 1, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 1, options: .curveEaseOut) {
            self.view.layoutIfNeeded()
        } completion: { success in
            
        }
        
        //MARK: 가로 변경
        widthAnchor.constant = 200
        
        UIView.animate(withDuration: 1, delay: 1.5, usingSpringWithDamping: 0.5, initialSpringVelocity: 1, options: .curveEaseOut) {
            self.view.layoutIfNeeded()
        } completion: { success in
            
        }
    }
}

'아이폰 개발 > Swift' 카테고리의 다른 글

swift stackView 튜토리얼  (0) 2021.07.22
swift layoutIfNeeded 예제 2  (0) 2021.07.22
swift - Xcode 설정  (0) 2021.06.26
swift - custom collectionview cell 주의  (0) 2021.06.26
Swift 스크롤 뷰 튜토리얼 2021 - 06 -03  (0) 2021.06.03