2014-09-25 2 views
0

iOS 개발에서 xibs로 작업 할 때 애니메이션에 관한 몇 가지 게시물을 읽었습니다. 대부분 내가 읽은 것은 프레임을 애니메이트하지 않고 제약 조건을 애니 메이팅하는 것이 었습니다. 시작시보기의 중심에 레이블을 붙인 다음 애니메이션을 적용하고 로그인 텍스트 필드 (일반적인 로그인 항목)를 표시합니다. iOS xib 용 제약 애니메이션

enter image description here

나는이 프레임을 애니메이션과 나는 텍스트 필드를 클릭 물론, 뷰가 "내 타이틀"레이블을 원래의 제약 조건을 적용하고 다시 원래 중심 위치로 밀어했다.

enter image description here

어떻게 중심의 제약 조건을 제거하고에 - 강제로 프로그램 상단에서 공간에 새로운 제약 조건을 추가 할 수 있습니까?

[UIView animateWithDuration: 0.8 
         delay: 1.0 
    usingSpringWithDamping: 0.8 
     initialSpringVelocity: 0.5 
        options: UIViewAnimationOptionCurveEaseOut 
       animations: ^{ 
        self.titleLabel.frame = CGRectOffset(self.titleLabel.frame, 0, -self.view.frame.size.height/4.5); 
       } completion: ^(BOOL finished) { 
        if (finished) 
        { 
         [UIView animateWithDuration: 0.8 
               delay: 0.3 
           usingSpringWithDamping: 0.8 
           initialSpringVelocity: 0.5 
              options: UIViewAnimationOptionCurveEaseInOut 
              animations: ^{ 

               self.userIdTextField.alpha = 1.0; 
               self.userPasswordTextField.alpha = 1.0; 
               self.loginButton.alpha = 1.0; 

              } completion: ^(BOOL finished) { 
              }]; 
        } 
       }]; 

답변

5

생각보다 쉽습니다. 제약 조건에 대한 IBOutlet을 생성하고 제거하고 다시 추가하는 대신 상수 값을 변경할 수 있습니다.

스토리 보드에서 제약 조건을 컨트롤을 뷰 컨트롤러의 소스 코드로 드래그하십시오. 이렇게하면 제약 조건을 가리키는 IBOutlet을 생성 할 수있는 옵션이 제공됩니다.

UIView 애니메이션에서 수행해야하는 모든 작업은 제약 조건 의 값을으로 변경하는 것입니다.

[UIView animateWithDuration:0.5 
        delay: 0.0 
       options: UIViewAnimationOptionTransitionNone 
      animations:^{ 
        _myViewHeight.constant += 20.0f; 
        [self.view layoutIfNeeded]; 
       } 
      completion:nil]; 

: 여기

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *myViewHeight; 

가 제약 상수를 변경하여 뷰의 높이를 변경 애니메이션 코드의 예이다 : 여기

은 자동 레이아웃 제약 출구의 예 이는 정확히 원하는 작업이 아닐 수도 있지만 작업을 완료하기 위해 이러한 방식으로 제약 조건을 수정할 수 있어야합니다.

0

내 제약을 다른 구조화했다 :

여기 내 애니메이션 코드입니다. 중심 제한 대신 중심 Y에서 거리를 제한하고 IBOutlet을 해당 제약 조건으로 설정 한 다음 애니메이션에 적용했습니다.