5

다음 코드를 사용하여 애니메이션에서 사용자 정의 키보드 높이를 높이려고합니다. 그러나 애니메이션을 무시하고 변경이 즉시 발생하는 이유를 알 수 없습니다.iOS 8에서 사용자 정의 키보드 높이 애니메이션하기

//In viewDidAppear 

[self.view needsUpdateConstraints]; 
[UIView animateWithDuration:2 animations:^{ 
    CGFloat _expandedHeight = 500; 
    NSLayoutConstraint *_heightConstraint = [NSLayoutConstraint 
      constraintWithItem: self.view 
      attribute: NSLayoutAttributeHeight 
      relatedBy: NSLayoutRelationEqual 
      toItem: nil 
      attribute: NSLayoutAttributeNotAnAttribute 
      multiplier: 0.0 
      constant: _expandedHeight]; 
    [self.view addConstraint: _heightConstraint]; 
    [self.view layoutIfNeeded]; 
}]; 

답변

0

우선 이것은 아래

CGFloat _expandedHeight = 500; 
NSLayoutConstraint *_heightConstraint = [NSLayoutConstraint 
     constraintWithItem: self.view 
     attribute: NSLayoutAttributeHeight 
     relatedBy: NSLayoutRelationEqual 
     toItem: nil 
     attribute: NSLayoutAttributeNotAnAttribute 
     multiplier: 0.0 
     constant: _expandedHeight]; 
[self.view addConstraint: _heightConstraint]; 
[self.view needsUpdateConstraints]; 
[UIView animateWithDuration:2 animations:^{ 

[self.view layoutIfNeeded]; 
}]; 
+0

이 솔루션을 사용하면 기간이 고려되지 않습니다. – Drico

+0

누군가 해결책을 찾았습니까? – Renatus

+0

CADisplayLink를 사용하는 것이 가장 좋습니다. 이 솔루션은 작동하지만 충분히 안정적이지 않습니다. –

0

를 작동 한 후, 애니메이션 블록 외부의 제약 조건을 추가 updateConstraints 요구 및 애니메이션 블록 내부 layoutIfNeeded .Hope 호출하면 나는 애니메이션을 사용하는 코드이다 선의 중심 X 위치. IBOutlet NSLayoutConstraint를 사용하여이 라인의 중심 X를 참조 뷰의 중심에 연결했습니다. 자동 레이아웃을 사용하여 애니메이션을 발생 시키려면 애니메이션 블록 내에서 제약 조건을 업데이트하고 layoutIfNeeded를 호출해야합니다. 이것은 자동 레이아웃을 사용한 애니메이션의 아이디어입니다.

blueScrollerCenterXConstraint.constant = (btn.tag - 4000)*btn.frame.size.width; 
    [blueScroller updateConstraints]; 

    [UIView animateWithDuration:0.3 animations:^{ 
    [blueScroller layoutIfNeeded]; 
}]; 
0
  1. 당신이 제약 조건을 추가하지 않아야합니다.

  2. 추가하고 비활성화하십시오 (또는 우선 순위를 정말 낮게 설정하십시오).

  3. 그런 다음 우선 순위를 999로 변경하고 애니메이션 블록에서 layoutIfNeded를 호출하십시오.

관련 문제