본문 바로가기

iOS/AutoLayout

iOS - Programmatically Animation

오늘은 버튼을 누르면 레이블이 움직이는(레이블의 height 앵커 값이 바뀌는) 실습을 했다 

 

option+ cmd+ 엔터 = preview 창띄우기

option + cmd + p = 미리보기 돌리기

 

 view.backgroundColor = UIColor(named: "MY_PINK")
        
        let someView = UIView()
        
        someView.backgroundColor = .white
        someView.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview(someView)
        someView.layer.cornerRadius = 8
        NSLayoutConstraint.activate([
            someView.widthAnchor.constraint(equalToConstant: 100),
            someView.heightAnchor.constraint(equalToConstant: 50),
            someView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor),
           //someView.centerYAnchor.constraint(equalTo: self.view.centerYAnchor)
            //someView.bottomAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.bottomAnchor)
            //버튼을 누를때 마다 바텀 앵커를 바꾼다.
        ]) // 배열로 담아 is active  = ture 한번에
        
            someViewBottomConstraint = NSLayoutConstraint(item: someView, attribute: .bottom, relatedBy: .equal, toItem: self.view.safeAreaLayoutGuide, attribute: .bottom, multiplier: 1.0, constant: 0)
            someViewBottomConstraint?.isActive = true
        //safeAreaLayoutGuide 는 화면상 노치같이 시스템에 가려질 수 있는 부분을 자체적으로 마진을 띄우는것. 다음같이 bottom 에 대한 safeArea 는 홈버튼 자리를 띄고 생성
            someViewBottomConstraint?.constant = -100

 

 

다음은 움직이는 레이블의 오토레이 아웃이다 

배경색, 그리고 trans 어쩌고 한다음 view 추가, 둥글게 만들고 , 앵커값 잡아주기(배열로 넣어 일일이 is active = true 안함)

height 앵커는 바뀌는 값이므로 변수 선언하고, NS~ 의 인자값을 초기 바텀 앵커의 초기 위치? 설정 

아래서 위로 올라감으로 -값이 더해진다

 

 

let moveViewUpBtn = UIButton(type: .system)
        moveViewUpBtn.translatesAutoresizingMaskIntoConstraints = false
        moveViewUpBtn.backgroundColor = .white
        moveViewUpBtn.setTitle("올리기", for: .normal)
        //폰트 크기
        moveViewUpBtn.titleLabel?.font = UIFont.boldSystemFont(ofSize: 30)
        moveViewUpBtn.setTitleColor(.black, for: .normal)
        // 패딩값 레이블 크기와 글자의 간격
        moveViewUpBtn.contentEdgeInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
        moveViewUpBtn.layer.cornerRadius = 10
        // 버튼을 누를때 동작
        moveViewUpBtn.addTarget(self, action: #selector(moveViewUp), for: .touchUpInside)
        self.view.addSubview(moveViewUpBtn)
        
        moveViewUpBtn.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true
        moveViewUpBtn.topAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.topAnchor, constant: 150).isActive = true

 

버튼 만들기 

 

// constant 값 바꾸는 메소드
    // 버튼 하나 만들어서 버튼 누를때마다 이 메소드 호출하면 됨.
    @objc fileprivate func moveViewUp() {
        someViewBottomConstraint?.constant -= 100
       //버튼 움직임 표현 
        UIViewPropertyAnimator(duration: 10, curve: .easeOut, animations: { [weak self] in
            guard let self = self else {return}
            self.view.layoutIfNeeded()
        }).startAnimation()
      
    }

 

anim 메소드 

인자로는 애니메이션 지속시간, 종류 등이 있다. 

 

다음 버튼을 한번 누를때마다 아래 view가 100만큼 올라감 

'iOS > AutoLayout' 카테고리의 다른 글

iOS - CollectionView  (0) 2022.06.20
iOS - Dynamic TableView Cell  (0) 2022.06.19
iOS - Programmatically AutoLayout, Preview  (0) 2022.06.07
iOS-StackView  (0) 2022.06.02
iOS-Constraint Priority  (0) 2022.05.30